• as an example....maybe something like this ?

    CREATE TABLE somedata(

    BoxID VARCHAR(2)

    ,BottleID VARCHAR(4)

    ,ItemCode VARCHAR(4)

    ,Batch INT

    );

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A1','1000','ABC1',900);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A1','1001','ABC1',900);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A1','1002','ABC1',900);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A1','1003','ABC1',900);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A1','1004','ABC1',900);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A2','2003','ABC2',999);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A2','2002','ABC2',999);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A2','2001','ABC2',999);

    INSERT INTO somedata(BoxID,BottleID,ItemCode,Batch) VALUES ('A2','2000','ABC2',999);

    WITH cte AS (

    SELECT BoxID,

    BottleID,

    ItemCode,

    Batch,

    ROW_NUMBER() OVER(PARTITION BY BoxID ORDER BY BottleId) rn

    FROM somedata

    )

    SELECT BoxID,

    ItemCode,

    Batch,

    MAX(CASE WHEN rn = 1 THEN BottleId ELSE '' END) B1,

    MAX(CASE WHEN rn = 2 THEN BottleId ELSE '' END) B2,

    MAX(CASE WHEN rn = 3 THEN BottleId ELSE '' END) B3,

    MAX(CASE WHEN rn = 4 THEN BottleId ELSE '' END) B4,

    MAX(CASE WHEN rn = 5 THEN BottleId ELSE '' END) B5,

    MAX(CASE WHEN rn = 6 THEN BottleId ELSE '' END) B6

    FROM cte

    GROUP BY BoxID, ItemCode, Batch

    ________________________________________________________________
    you can lead a user to data....but you cannot make them think
    and remember....every day is a school day