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