Member 12085957 Ответов: 1

Динамические сводные запросы с динамическими датами в качестве заголовка столбца


Мне нужно повернуть таблицу так, как показано ниже


Даты 2016-01-17 2016-01-18 2016-01-19

Заказы 100 120 150

Отмененные заказы 50 20 30

Может ли кто-нибудь дать мне предложения в письменном запросе?Здесь даты должны приходить динамически.

Что я уже пробовал:

Это фактический результирующий набор Sql

----------------------------------
| Даты |Поручений |Отмененных Заказов|
----------- |----- |---------------|
|2016-01-17 |100 | 50 |
|2016-01-18 |120 | 20 |
|2016-01-20 |150 | 30 |
----------------------------------

Maciej Los

Извините, но ваш вопрос неясен. Пожалуйста, будьте более конкретны и предоставьте более подробную информацию, например, ожидаемый результат.

1 Ответов

Рейтинг:
1

NightWizzard

Если количество столбцов даты является переменным, то нет никаких шансов решить эту проблему с помощью языка T-SQL (в любом случае вы можете сделать это с помощью функции CLR в C# или VB.net).

Если количество столбцов дат фиксировано и всегда одинаково, вы можете сделать что-то вроде:

DECLARE @date1 AS nvarchar(10);
DECLARE @date2 AS nvarchar(10);
DECLARE @date3 AS nvarchar(10);
DECLARE @query AS nvarchar(max);

--Gather your dates and set them as column headers (nvarchars ):
SET @date1 = <first date found>;
SET @date2 = <second date found>;
SET @date3 = <third date found>;

--Now create your query as nvarchar(max) variable:
SET @query = 'SELECT <a field>
                   , <another field>
                   , SUM(<first field to summarize>) AS [' + @date1 + '] 
                   , SUM(<second field to summarize>) AS [' + @date2 + ']
                   , SUM(<third field to summarize>) AS [' + @date3 + ']
               FROM [dbo].[<source table name>]
              WHERE (<any filter expressions here>)';

--Execute the query
EXEC sp_executesql @query;