#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
У меня есть следующая таблица.
Таблица 1
ID | 12/1 | 1/1 | 2/1 |
---|---|---|---|
X | 1 | 2 | 3 |
Y | 4 | 5 | 6 |
Z | 7 | 8 | 9 |
Мне нужна следующая таблица,
ID | Дата | Прогноз |
---|---|---|
X | 12/1 | 1 |
X | 1/1 | 2 |
X | 2/1 | 3 |
Y | 12/1 | 4 |
Y | 1/1 | 5 |
Y | 2/1 | 6 |
Z | 12/1 | 7 |
Z | 1/1 | 8 |
Z | 2/1 | 9 |
Есть ли в любом случае, что я могу сделать это в SQL?
Любая помощь будет оценена по достоинству!
Заранее спасибо.
Комментарии:
1. В соответствии с руководством по вопросам, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или где-либо еще) и почему это не соответствовало вашим потребностям.
2. То, что вам нужно, находится здесь, а не поворачивается.
3. Эти столбцы плохо спроектированы: у вас не должно быть данных в именах столбцов. Другими словами, ваш конечный результат-это то, какой должна была быть таблица в первую очередь
Ответ №1:
НЕПРИВЯЗАННЫЙ или подход со ЗНАЧЕНИЯМИ был бы более эффективным, НО, основываясь на именах ваших столбцов, я подозреваю, что со временем у вас будут переменные/расширяющиеся столбцы.
Вот подход, который будет динамически откреплять ваши данные без фактического использования динамического SQL или необходимости указывать столбцы (только те, которые следует исключить).
Пример
Select A.ID ,B.* From YourTable A Cross Apply ( Select Date = [Key] ,Forecast = Value From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES )) Where [Key] not in ('ID') ) B
Результаты
ID Date Forecast X 12/1 1 X 1/1 2 X 2/1 3 Y 12/1 4 Y 1/1 5 Y 2/1 6 Z 12/1 7 Z 1/1 8 Z 2/1 9
Комментарии:
1. Я удалил свой ответ, но это определенно правильный путь, если у вас есть какие-либо планы в отношении дополнительных имен столбцов.
2. Спасибо за это!
3. @Sai Всегда рад помочь