Мне нужно сгруппировать таблицу во время моего запроса и до тех пор, пока не узнаю, что я делаю это после запроса - с кодом, так как моя группа довольно сложна. Но с новыми данными, кажется, требуется несколько минут, и я думаю, что есть лучший способ.Группировка, преобразование строк в столбцы без агрегата
Мои текущие результаты запроса в этом:
FKId | Name | A | B | C
1 Alpha 2 3 2
1 Beta 2 5 7
2 Alpha 8 1 10
2 Beta 7 -5 6
2 Gamma 1 2 3
И я преобразовать его в этом:
FKId | Alpha[A] | Alpha[B] | Alpha[C] | Beta[A] | Beta[B] | Beta[C] | Gamma[A] | Gamma[B] | Gamma[C]
1 2 3 2 2 5 7
2 8 1 10 7 -5 6 1 2 3
Можно ли делать с SQL? (И я предполагаю, что это должно быть гораздо быстрее, чем если бы я сделать это с кодом)
- Названия могут быть любыми
- У меня есть очень большое количество colums A, B, C (например, 20 - 30). Количество столбцов результатов может легко переходить к тысячам, так как средний проект имеет около 100 имен.
- У меня есть 10-20 столбцов, которые я должен сгруппировать, но сделать одну группу с помощью FKId в порядке - эти столбцы одинаковы.
- Мы используем разные SQL-базы данных, поэтому я не могу использовать определенные функции, такие как
PIVOT
. Я знаю, что мы использовали MySQL, MsSQL и SQLite много. - Мы используем NHibernate, если это имеет значение.
- Я бы также отметил решение, сделанное для
MySQL
, если используются определенные функции. Мы используем его в 80%, и это уже значительно улучшит среднюю производительность, если я смогу сделать это, по крайней мере, для MySQL.
Это хорошее решение, но, к сожалению, это требует, чтобы знать имена - я не знаю их на время Я формирую запрос – Archeg
Я столкнулся с аналогичным решением в своем коде. На мой взгляд, лучшей альтернативой является формирование запроса в коде приложения с использованием имен переменных. После создания запроса выполните этот запрос в SQL с помощью команды execute. См. Синтаксис для выполнения динамического SQL-запроса в базе данных, которую вы будете использовать. –