Как динамически столбец сводки на основе данных строк - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь перечислить строки данных, чтобы быть столбцом, используя сводную.Но поскольку я ищу везде, большинство из них использует статический сводный элемент, который сам перечисляет нужный им столбец.

Но в моем случае я хочу, чтобы столбец был динамически направлен из данных строк.

-----------------------------------------
 Date      Ingredients       TotalAmount
-----------------------------------------
1/2/19        butter            20.00
1/2/19        butter             5.00
2/3/19        Flour              7.00
2/3/19        Flour              3.00
4/3/19        Butter             4.00
2/4/19        Salt              12.00
3/4/19        Cinnamon           2.00
5/4/19        Cinnamon          13.00
.
.
.
.
.
.
.
.
Many more to comes
-----------------------------------------

Я уже пробовал динамический пивот, когда гуглил, как показано ниже;однако, он не нашел никакого решения.

DECLARE @s AS NVARCHAR(MAX)

SELECT @s= ISNULL(@s + ',','') 
       + QUOTENAME(Ingredients)
FROM (SELECT Ingredients from Sales) AS Y

SELECT * FROM (
SELECT  S.Date, S.TotalAmount, A.Ingredients FROM Sales S
) Z
PIVOT ( SUM(TotalAmount) FOR Ingredients IN (' + @s +')) AS MENU

Результат:

Msg 102, Level 15, State 1, Line 23
Incorrect syntax near ' + @PLUNAME +'.

Я хочу, чтобы мой результат запроса был таким, как показано ниже;

-----------------------------------------------------------------
 Date      Butter    Flour    Salt    Cinnamon   ...  ...  ... and many more     
-----------------------------------------------------------------
1/2/19     25.00    
2/3/19              10.00
4/3/19      4.00
2/4/19                       12.00
3/4/19                                 2.00
5/4/19                                13.00
.
.
.
.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете попробовать это:

CREATE TABLE List(Date date, ingredients varchar(100), TotalAmount FLOAT);

INSERT INTO List VALUES 
('01/02/2019','butter',20.00),
('01/02/2019','butter',5.00),
('02/03/2019','Flour',7.00),
('02/03/2019','Flour',3.00),
('04/03/2019','butter', 4.00),
('02/04/2019','Salt',12.00),
('03/04/2019','Cinnamon',2.00),
('05/04/2019','Cinnamon',13.00);


DECLARE @columns NVARCHAR(MAX);

SELECT @columns = STUFF((
            SELECT DISTINCT ',' + '['+ingredients+']' FROM List
            FOR XML PATH('')
            ), 1, 1, '')
FROM List;


SET @sql = 'SELECT Date,' + @columns + ' FROM
(
  SELECT Date, ingredients, TotalAmount FROM List
) AS src
PIVOT
(
  SUM(src.TotalAmount) FOR src.ingredients IN ('+ @columns
  + ')
) AS p;';

EXEC sp_executesql @sql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...