Как использовать сводный запрос для разных таблиц и разных столбцов одной и той же таблицы ?
/*Сначала я создал переменную таблицу для требуемых данных. Это будет моя исходная или входная таблица, к которой я хочу применить сводный запрос*/
Объявить @таблице (клиент тип nvarchar(Макс) не нуль,страна тип nvarchar(Макс)не нуль,InvoiceAmount ИНТ не null )
Вставить @подробности
ВЫБРАТЬ РАЗЛИЧНЫЕ
Продолжение.Имя компании в качестве клиента,
Страна.Страна как страна,
Sal.InvoiceAmount
От продаж Сал
Внутреннее соединение контактов Конт Сал.Параметр ClientID=Продолжение.Идентификатор contactid
Странах внутреннее объединение страны на продолжение.CountryID=Страна.CountryID
Где Сэл.SaleID<>0 и
Продолжение ContactID<>0 и
Сэл.InvoiceStatus В ('рублей','РН','РА','вертолет','РТ');
Выберите * от @подробности
/*Мой вывод будет следующим
-------------------------------------------------------------------------------
Название Страна InvoiceAmount
------------------------------------------------------------------------------
Раджа Индия 100.00
Аджит Begium 200.00
Суканья Китай 300.00
Неха Индия 600.00
Раджа Индия 300.00
Аджит Begium 800.00
Суканья Китай 700.00
Неха Индия 600.00
Раджа Бельгия 50,00
Неха Франция 130.00*/
-------------------------------------------------------------------------------
Я получаю этот вывод из вышеприведенного запроса
-------------------------------------------------------------------------------
/*Я хочу применить сводный запрос таким образом, чтобы выходные данные выглядели следующим образом
А)один выход (когда pivot применяется к стране)
Сумма(InvoiceAmount)
---------------------------------------------------------------------------------
Название Индия Бельгия Китай Франция
---------------------------------------------------------------------------------
Раджа 400.00 50.00
Аджит 10000.00
Суканья 10000.00
Неха 12000.00 130.00
--------------------------------------------------------------------------------
Б)второго выхода(для поворота применяется на имя)
Сумма(InvoiceAmount)
------------------------------------------------------------------------------
Страна Раджа Аджит Суканья Неха
------------------------------------------------------------------------------
Индия 400.00 12000.00
Бельгия 50.00 10000.00
Китай 10000.00
Франция 130.00
------------------------------------------------------------------------------
Все эти выходные данные "а" и "в" должны исходить из одного и того же запроса. Для этого я использовал табличные переменные и переменные столбцов.
*/
--------------------------------------------------------------------------------
/*Я написал следующий запрос, но получил ошибку. Запрос не работает должным образом. Пожалуйста, помогите мне решить эти вопросы. Я даю свой код здесь*/
/*Целью этого запроса является использование Pivot, Но данные могут быть извлечены из любой таблицы и любых столбцов соответствующей таблицы.
Здесь используется таблица "@Details", которая является табличной переменной, как InputTable. Столбцы могут быть любыми, начиная с "@Details".
Это означает, что если переменная столбца изменяется в запросе, то pivot должен быть выполнен на уважаемом столбце
Я делаю это потому, что хочу использовать один и тот же запрос для нескольких целей*/
ОБЪЯВИТЬ @QUERY КАК NVARCHAR(MAX),
@COLSPIVOT AS NVARCHAR(МАКС),
@Клиент как NVARCHAR(макс.),
@Страна как NVARCHAR(макс.),
@InvoiceAmount AS NVARCHAR(макс.),
@InputTable AS NVARCHAR(макс.),
@COLSUNPIVOT AS NVARCHAR(МАКС)
SET @Client = 'клиент'
В @Страна=''
SET @InvoiceAmount = 'InvoiceAmount'
SET @InputTable = '@Details'
Выберите @COLSUNPIVOT = 'вещи((выбор ","+функции quotename([@клиент])
Из '+ @InputTable + ' как C
ДЛЯ XML-ПУТИ(")), 1, 1, ")'
Выберите @COLSPIVOT = 'вещи((выбрать различные "," + функции quotename([@страна])
Из '+ @InputTable + ' для XML путь("), типа).значение(".", 'ТИП NVARCHAR(МАКС)') ,1,1,")'
НАБОР @ЗАПРОСОМ
= 'SELECT DISTINCT '+@Client+', '+@COLSPIVOT+'
ОТ
(
Выберите различные '+@Country+','+@Client+','+@InvoiceAmount+' из ' + @InputTable + '
)Тэ
СТЕРЖЕНЬ
(
SUM(['+@InvoiceAmount+'])
Для страны в ('+@COLSPIVOT+')
) ПИВ'
EXEC(@QUERY)
Что я уже пробовал:
Пожалуйста, помогите мне решить эту проблему. Я описал свой вопрос о SQL PIVOT query. Если есть какие-либо проблемы, чтобы понять этот вопрос, пожалуйста, дайте мне знать.
@Детальный Вывод
-------------------------------------------------------------------------------
Название Страна InvoiceAmount
------------------------------------------------------------------------------
Раджа Индия 100.00
Аджит Begium 200.00
Суканья Китай 300.00
Неха Индия 600.00
Раджа Индия 300.00
Аджит Begium 800.00
Суканья Китай 700.00
Неха Индия 600.00
Раджа Бельгия 50,00
Неха Франция 130.00*/
-------------------------------------------------------------------------------
Требуемый вывод/*я снова пытаюсь ввести вывод, потому что он неправильно отображается. Но это бесполезно. Поэтому я уже упоминал, что это сумма InvoiceAmount*/
А)один выход (когда pivot применяется к стране)
Сумма(InvoiceAmount)
---------------------------------------------------------------------------------
Название Индия Бельгия Китай Франция
---------------------------------------------------------------------------------
Раджа 400.00 50.00
Аджит 10000.00
Суканья 10000.00
Неха 12000.00 130.00
--------------------------------------------------------------------------------
Б)второго выхода(для поворота применяется на имя)
Сумма(InvoiceAmount)
------------------------------------------------------------------------------
Страна Раджа Аджит Суканья Неха
------------------------------------------------------------------------------
Индия 400.00 12000.00
Бельгия 50.00 10000.00
Китай 10000.00
Франция 130.00
------------------------------------------------------------------------------