Это кажется так просто сделать, но я не могу получить результаты, которые мне нужно ...Создание нескольких столбцов из одного столбца текста, вроде как стержень
У меня есть категория, дата, а код:
Cat Dt Code
A 2013-07-02 X1
A 2013-07-02 Y4
A 2013-07-02 L2
A 2013-07-02 M8
A 2013-07-02 H7
A 2013-07-02 P4
и хотите вернуть его, как это:
Cat Dt Code1 Code1 Code3 Code4 Code5 Code6
A 2013-07-02 X1 Y4 L2 M8 H7 P4
- некоторые SQL, чтобы проверить с ...
CREATE TABLE dbo.test1 (Cat VARCHAR(8), Dt DATE, Code VARCHAR(8))
INSERT INTO dbo.test1 (Cat, Dt, Code)
-- This set should return a value in all 6 Code columns...
SELECT 'A', '2013-07-02', 'X1'
UNION SELECT 'A', '2013-07-02', 'Y4'
UNION SELECT 'A', '2013-07-02', 'L2'
UNION SELECT 'A', '2013-07-02', 'M8'
UNION SELECT 'A', '2013-07-02', 'H7'
UNION SELECT 'A', '2013-07-02', 'P4'
-- This set should have a NULL in Code6 since there are only 5 codes
UNION SELECT 'B', '2013-07-03', 'Y6'
UNION SELECT 'B', '2013-07-03', 'D5'
UNION SELECT 'B', '2013-07-03', 'F8'
UNION SELECT 'B', '2013-07-03', 'G9'
UNION SELECT 'B', '2013-07-03', 'J2'
-- This set should have a NULL in Code6 since there are only 5 distinct codes
UNION SELECT 'C', '2013-07-04', 'D1'
UNION SELECT 'C', '2013-07-04', 'D1'
UNION SELECT 'C', '2013-07-04', 'U3'
UNION SELECT 'C', '2013-07-04', 'T9'
UNION SELECT 'C', '2013-07-04', 'G4'
-- This set has 7, but I only care about 6 of them. Which 6 doesn't matter, just any of the 6 codes
UNION SELECT 'D', '2013-07-05', 'T1'
UNION SELECT 'D', '2013-07-05', 'Y2'
UNION SELECT 'D', '2013-07-05', 'U3'
UNION SELECT 'D', '2013-07-05', 'I9'
UNION SELECT 'D', '2013-07-05', 'P8'
UNION SELECT 'D', '2013-07-05', 'L7'
UNION SELECT 'D', '2013-07-05', 'J6'
любая помощь будет оценена
Каков порядок величин, определяющих 'code1 ... Code6'? Кроме того, какие RDBMS вы используете (YYYY-MM-DD, вероятно, предлагает MySQL, хотя 'dbo.' предлагает MS SQL Server) –
Извините, заказ не имеет значения. Редко бывает больше 6, и если есть, я могу отбросить все более 6. Я использую SQL Server 2008 R2. – user2701201