У меня есть две таблицы 1. #SetValuesTable
2. #labelTempTab
Cross применяются наряду с дополнительными столбцами
данных в #SetValuesTable
выглядеть следующим образом:
MNUM la1 la2 la3 la4 PropertyType
12 1 0 2 s
13 4 0 5 7 p
данных в #labelTempTab
выглядеть следующим образом:
RowNum Label Title PropertyType
1 la1 Agent1 s
2 la2 Agent2 s
3 la3 Agent3 s
4 la1 Agent1 p
5 la2 Agent2 p
6 la3 Agent3 p
7 la4 Agent4 p
Мне нужна таблица результатов следующим образом:
MNUM LabelName LabelValue PropertyType
12 la1 1 s
12 la2 0 s
12 la3 2 s
13 la1 4 p
13 la2 0 p
13 la3 5 p
13 la4 7 p
Запрос:
SELECT MNUM, LabelName , LabelValue FROM #SetValuesTable
CROSS APPLY (VALUES '
stuff((SELECT ',('''+ replace(C.label,'''','"') + ''',' + quotename(C.label) + ')' FROM #labelTempTab c group by label FOR xml path('')), 1, 1, '')
) AS UPTab (Label , LabelValue);
Этот запрос приведет к:
MNUM LabelName LabelValue
12 la1 1
12 la2 0
12 la3 2
13 la1 4
13 la2 0
13 la3 5
13 la4 7
Может некоторые тела мне помочь, чтобы получить остальные столбцы также.
Примечание. Я попытался открепить таблицу, используя UNPIVOT, но производительность не очень хорошая. С перекрестным применением производительность действительно хорошая.
Почему вы используете динамический SQL? –
Гордон, который я написал, только часть более крупного. Решение для обычного SQL также будет работать для меня. изменен вопрос. – BumbleBee
Вы сказали, что у вас есть 500 + столбцов, но я могу подсчитать только 10 столбцов в обеих таблицах. Где остальные? – Aducci