Кросс-таблица / сводный запрос в TSQL для столбцов nvarchar - PullRequest
1 голос
/ 25 августа 2010

У меня есть Таблица1:

ID  Property
1   Name
2   City
3   Designation

и Таблица2:

ID  RecordID  Table1ID  Value
1   1         1         David
2   1         2         Tokyo
3   2         1         Scott
4   2         3         Manager

Table1ID таблицы Table2 соответствует идентификатору таблицы Table1. Теперь я хочу показать значения столбцов свойства Table1 в виде заголовков столбцов и иметь результирующий набор в формате, подобном следующему:

RecordID     Name    City    Designation
1            David   Tokyo   NULL
2            Scott   NULL    Manager

Каков наилучший / эффективный способ достижения этого в T-SQL , учитывая, что число записей в таблице 1 (т. Е. Столбцы в наборе результатов) может изменяться и, следовательно, должно обрабатываться динамически .

Хотя я пробовал запросы, основанные на PIVOT и CASE, но боролся с ними обоими. (

Буду признателен за любую помощь / руководство.

Спасибо!

Обновление:
Мне удалось создать динамический запрос, но я до сих пор не могу понять, почему MAX был использован в операторах CASE. Пожалуйста, не обращай внимания на мою глупость.

1 Ответ

3 голосов
/ 25 августа 2010

Использование:

  SELECT t2.recordid,
         MAX(CASE WHEN t1.property = 'Name' THEN t2.value END) AS name,
         MAX(CASE WHEN t1.property = 'City' THEN t2.value END) AS city,
         MAX(CASE WHEN t1.property = 'Designation' THEN t2.value END) AS designation
    FROM TABLE2 t2
    JOIN TABLE1 t1 ON t1.id = t2.table1id
GROUP BY t2.recordid
ORDER BY t2.recordid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...