SQL-запрос для передачи значений из строк в столбцы для групп выбора - PullRequest
2 голосов
/ 17 августа 2011

Вот проблема:

Набор данных:

Col1        Col2  
BK.01.04    A0103  
BK.01.04    A0306  
BK.01.04    A0309  
BK.01.04    A0403  
BK.02.01    A1403  
BK.02.02    A1403  
BK.02.03    A0403  
BK.02.03    A0703  
BK.02.04    A0103  
BK.02.04    A0306  
BK.02.04    A0309  
BK.02.04    A0403 

Требуемый результат:

Col1        Col2    Col3    Col4    Col5  
BK.01.04    A0103   A0306   A0309   A0403  
BK.02.01    A1403  
BK.02.02    A1403  
BK.02.04    A0103   A0306   A0309   A0403  

Любые идеи о том, как это сделать в MS AccessПростой SQL?Любая помощь очень ценится:)

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Не совсем то, что вы хотели, но я думаю, вам будет сложно заполнить крайний левый столбец требуемым значением ...

Сводная таблица с использованием ANSI-SQL:

CREATE TABLE DataSet ( Col1 varchar(20), Col2 varchar(20))

INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.01.04','A0103')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.01.04','A0306')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.01.04','A0309')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.01.04','A0403')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.01','A1403')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.02','A1403')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.03','A0403')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.03','A0703')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.04','A0103')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.04','A0306')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.04','A0309')
INSERT INTO DataSet ( Col1, Col2 ) VALUES ( 'BK.02.04','A0403')

SELECT Col1,
MAX(CASE Col2 WHEN 'A0103' THEN 'A0103' ELSE '' END) Col2,
MAX(CASE Col2 WHEN 'A0306' THEN 'A0306' ELSE '' END) Col3,
MAX(CASE Col2 WHEN 'A0309' THEN 'A0309' ELSE '' END) Col4,
MAX(CASE Col2 WHEN 'A0403' THEN 'A0403' ELSE '' END) Col5,
MAX(CASE Col2 WHEN 'A1403' THEN 'A1403' ELSE '' END) Col6
FROM DataSet 
GROUP BY DataSet.Col1

Результаты:

Col1                 Col2  Col3  Col4  Col5  Col6
-------------------- ----- ----- ----- ----- -----
BK.01.04             A0103 A0306 A0309 A0403 
BK.02.01                                     A1403
BK.02.02                                     A1403
BK.02.03                               A0403 
BK.02.04             A0103 A0306 A0309 A0403 

(5 row(s) affected)

Если вы используете MS-Access, вы можете сделать то же самое, используя сводные таблицы:

http://office.microsoft.com/en-us/access-help/designing-your-first-pivottable-pivotchart-views-in-access-HA001034580.aspx

0 голосов
/ 17 августа 2011

Присоедините таблицу обратно к себе:

select
    t1.col1,
    t1.col2,
    t2.col2 as col3,
    t3.col2 as col4,
    t4.col2 as col5
from mytable t1
left join mytable t2 on t2.col1 = t1.col1 and t2.col2 > t1.col2
left join mytable t3 on t3.col1 = t1.col1 and t3.col2 > t2.col2 and t2.col2 is not null
left join mytable t4 on t4.col1 = t1.col1 and t4.col2 > t3.col2 and t3.col2 is not null
order by 1;

Использование left join означает, что вы получите пропуски, если в объединенной таблице нет совпадающих строк.Все это дерьмо в условиях соединения состоит в том, чтобы убедиться, что в каждом столбце есть разное и возрастающее значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...