SQL Выбор всех записей с составным ключом - PullRequest
0 голосов
/ 09 февраля 2012

Вот структура таблицы с первыми 6 столбцами в качестве составных ключей.

col1    col2    col3    col4    col5    col6    col7    col8
A1  A2  A3  A4  A5  1   xx  yy
A1  A2  A3  A4  A5  2   xxx yyy
A1  A2  A3  A4  A5  3   a   b
A1  B2  A3  A4  A5  4   aa  bb
B1  A2  A3  A4  A5  5   aaa bbb
B1  B2  B3  B4  B5  6   d   e
B1  B2  B3  B4  B5  7   dd  ee
B1  B3  C3  B4  B5  8   ddd eee

Мне нужна хранимая процедура, которая возвращает значения, как показано ниже

A1  A2  A3  A4  A5  xx  yy  xxx yyy a   b
A1  B2  A3  A4  A5  aa  bb
B1  A2  A3  A4  A5  aaa bbb     
B1  B2  B3  B4  B5  d   e   dd  ee
B1  B2  C3  B4  B5  ddd eee

Любые указатели или помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 09 февраля 2012

Во-первых, в качестве стандартного набора результатов из запроса вы не можете возвращать переменные номера столбцов, однако вы можете вернуть столбец, который является столбцом xml (введен в SQL 2005) http://msdn.microsoft.com/en-us/library/ms345117%28v=sql.90%29.aspx, который затем можно связать к. Привязка должна быть динамической. Вы можете использовать сводную функцию http://msdn.microsoft.com/en-us/library/ms177410.aspx, которая может помочь в представлении данных в нужном формате - или, как указано выше, вы можете использовать динамический SQL. Если вы сделаете это, вы должны сгенерировать ваш динамический SQL внутри хранимой процедуры и использовать sp_executesql для выполнения строки, которую вы генерируете http://msdn.microsoft.com/en-us/library/ms175170.aspx, вам, вероятно, потребуется передать параметры http://support.microsoft.com/kb/262499 для защиты от атак внедрения. Всего несколько шагов, чтобы выучить ... однако каждый шаг не особенно сложен и это отличное упражнение!

0 голосов
/ 15 февраля 2012

проверьте это, не знаю, помогает вам это или нет.Я использовал SQL Server 2008, он возвращает результат в соответствии с вашими требованиями.

SELECT col1, col2, col3, col4, col5,
(SELECT ' ' + col7 + ' ' + col8  FROM TABLE1 t1 
WHERE t1.col1 = t.col1 and t1.col2 = t.col2 and 
t1.col3 = t.col3 and t1.col4 = t.col4 and t1.col5 = t.col5
ORDER BY col6
FOR XML PATH('')) AS mearge_col
FROM TABLE1 t 
GROUP BY col1, col2, col3, col4, col5
0 голосов
/ 09 февраля 2012

Если вам просто нужен результат, подобный этому:

A1  A2  A3  A4  A5  xx,yy,xxx,yyy,a,b
A1  B2  A3  A4  A5  aa,bb
B1  A2  A3  A4  A5  aaa,bbb
B1  B2  B3  B4  B5  d,e,dd,ee
B1  B3  C3  B4  B5  ddd,eee

Тогда простой запрос сделает:

  select COL1
        ,COL2
        ,COL3
        ,COL4
        ,COL5
        ,LISTAGG(COL7 || ',' || COL8, ',') within group (order by COL6)
    from TAB1
group by COL1, COL2, COL3, COL4, COL5
order by COL1, COL2, COL3, COL4, COL5   

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

...