这应该是你要找的……
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
CREATE TABLE #TestData (
Col2 CHAR(5) NOT NULL,
Col3 CHAR(3) NOT NULL,
Col4 CHAR(4) NOT NULL,
Col5 TIME(0) NOT NULL,
Col6 CHAR(5) NOT NULL,
Col7 TIME(0) NOT NULL
);
INSERT #TestData (Col2, Col3, Col4, Col5, Col6, Col7) VALUES
('Shop1', 'Mon', 'open', '6am ', 'Close', '4pm'),
('Shop1', 'Tue', 'Open', '6am ', 'Close', '5pm'),
('shop1', 'Wed', 'Open', '6am ', 'Close', '4pm'),
('Shop2', 'Mon', 'open', '10am', 'Close', '3pm'),
('Shop2', 'Tue', 'open', '11am', 'Close', '2pm');
-- SELECT * FROM #TestData td;'
--============================================================
SELECT
Col1 = ROW_NUMBER() OVER (ORDER BY td.Col2),
td.Col2,
Col3 = MAX(CASE WHEN dn.DayNum = 1 THEN td.Col3 END),
Col4 = MAX(CASE WHEN dn.DayNum = 1 THEN 'open' END),
Col5 = MAX(CASE WHEN dn.DayNum = 1 THEN col5 END),
Col6 = MAX(CASE WHEN dn.DayNum = 1 THEN 'close' END),
Col7 = MAX(CASE WHEN dn.DayNum = 1 THEN col7 END),
Col8 = MAX(CASE WHEN dn.DayNum = 2 THEN td.Col3 END),
Col9 = MAX(CASE WHEN dn.DayNum = 2 THEN 'open' END),
Col10 = MAX(CASE WHEN dn.DayNum = 2 THEN col5 END),
Col11 = MAX(CASE WHEN dn.DayNum = 2 THEN 'close' END),
Col12 = MAX(CASE WHEN dn.DayNum = 2 THEN col7 END),
Col13 = MAX(CASE WHEN dn.DayNum = 3 THEN td.Col3 END),
Col14 = MAX(CASE WHEN dn.DayNum = 3 THEN 'open' END),
Col15 = MAX(CASE WHEN dn.DayNum = 3 THEN col5 END),
Col16 = MAX(CASE WHEN dn.DayNum = 3 THEN 'close' END),
Col17 = MAX(CASE WHEN dn.DayNum = 3 THEN col7 END),
Col18 = MAX(CASE WHEN dn.DayNum = 4 THEN td.Col3 END),
Col19 = MAX(CASE WHEN dn.DayNum = 4 THEN 'open' END),
Col20 = MAX(CASE WHEN dn.DayNum = 4 THEN col5 END),
Col21 = MAX(CASE WHEN dn.DayNum = 4 THEN 'close' END),
Col22 = MAX(CASE WHEN dn.DayNum = 4 THEN col7 END),
Col23 = MAX(CASE WHEN dn.DayNum = 5 THEN td.Col3 END),
Col24 = MAX(CASE WHEN dn.DayNum = 5 THEN 'open' END),
Col25 = MAX(CASE WHEN dn.DayNum = 5 THEN col5 END),
Col26 = MAX(CASE WHEN dn.DayNum = 5 THEN 'close' END),
Col27 = MAX(CASE WHEN dn.DayNum = 5 THEN col7 END)
FROM
#TestData td
CROSS APPLY ( VALUES (CASE td.Col3
WHEN 'Mon' THEN 1
WHEN 'Tue' THEN 2
WHEN 'Wed' THEN 3
WHEN 'Thu' THEN 4
WHEN 'Fri' THEN 5
END) ) dn (DayNum)
GROUP BY
td.Col2;
结果...
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 Col11 Col12 Col13 Col14 Col15 Col16 Col17 Col18 Col19 Col20 Col21 Col22 Col23 Col24 Col25 Col26 Col27
-------------------- ----- ---- ---- ---------------- ----- ---------------- ---- ---- ---------------- ----- ---------------- ----- ----- ---------------- ----- ---------------- ----- ----- ---------------- ----- ---------------- ----- ----- ---------------- ----- ----------------
1 Shop1 Mon open 06:00:00 close 16:00:00 Tue open 06:00:00 close 17:00:00 Wed open 06:00:00 close 16:00:00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
2 Shop2 Mon open 10:00:00 close 15:00:00 Tue open 11:00:00 close 14:00:00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL