Итоговое значение по строкам и столбцам в pivot
Я хочу, чтобы строка мудрая и столбец мудрый итог
Create table #Sections (SecID int, Secnam varchar(50)) create table #ItemMasterFile(CodeItem int, Descriptionitem varchar(max),SecID int,CID int) create table #Probale (BID int, CodeItem int, prdqtyint,EntryDate date) insert into #Sections values (1, 'HR'), (2, 'Baby'), (3, 'Ladies'), (4, 'Mix Rammage'), insert into #ItemMasterFile values (1, 'A', '1'), (2, 'B', '2'), (3, 'C', '3'), (4, 'D' ,'4') insert into #Probale values (1, '1', '1', '5/01/2019 '), (2, '2', '1', '5/01/2019 '), (3, '3', '1', '5/01/2019 '), (4, '2', '1', '5/02/2019 '), (5, '3', '1', '5/02/2019 '), (6, '4', '1', '5/02/2019 '), (6, '1', '1', '5/03/2019 '), (7, '2', '1', '5/04/2019 '), (8, '4', '1', '5/05/2019 '),
Что я уже пробовал:
вот моя процедура в магазине
Create Procedure [dbo].[Pivot_Item1] @StartDate Date, @Enddate Date AS BEGIN DECLARE @cols AS NVARCHAR(MAX) DECLARE @query AS NVARCHAR(MAX) -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; SELECT Distinct Entrydate INTO #Dates26 FROM Probale WHERE EntryDate BETWEEN @StartDate AND @Enddate ORDER BY EntryDate SELECT @cols = COALESCE(@cols + ',','') + QUOTENAME( CONVERT(varchar(2),EntryDate) ) FROM (SELECT DISTINCT DATEPART(DAY, EntryDate) AS EntryDate FROM #Dates26 ) T ORDER BY EntryDate --SET @cols = STUFF(@cols, 1, 1, '') SET @query = N'SELECT * FROM (SELECT Descriptionitem,Probale.prdqty, DATEPART(DAY, Probale.EntryDate)as DDate FROM Probale left JOIN ItemMasterFile on ItemMasterFile.Codeitem=Probale.Codeitem where Probale.DelID is Null and Probale.EntryDate BETWEEN @StartDate AND @Enddate )prd PIVOT (Sum(prdqty) FOR DDate IN (' + @cols + ')) AS stat' exec sp_executesql @query , N'@StartDate datetime,@enddate datetime', @StartDate=@StartDate,@Enddate=@Enddate END
OriginalGriff
И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Какая помощь вам нужна?
akhter86
Дорогой OriginalGriff,
Я хочу, чтобы строки и столбца мудрый общей сложности,выше хранимая процедура просто отображение даты мудрый общего элемента,теперь я хочу, чтобы строки общая или каждого элемента и столбца мудрый итог каждого дня.
OriginalGriff
И что же вы пытались сделать для этого?
Что это дало, и что вы сделали, чтобы попытаться исправить это?
Какие ошибки вы получили?
akhter86
Дорогой OriginalGriff,
я попробовал это ( ALTER Procedure [dbo].[Pivot_Item2]
@StartDate Дата,
@Дата Окончания Срока Действия
АС
НАЧАТЬ
Объявите @cols как NVARCHAR(макс.)
Объявить @query как NVARCHAR(MAX)
объявить @sum nvarchar(max);
Выберите @сумма= КОАЛЕСЦИРУЮТ(@сумма + ',',") + ('сумма('+функции quotename(prdqty)+')') от Probale;
-- Установить параметр nocount на добавленную предотвратить дополнительные результирующие наборы
-- вмешательство в операторы SELECT.
УСТАНОВИТЕ NOCOUNT ON;
Выберите Distinct Entrydate в #Dates26
Из Пробейла
Где EntryDate между @StartDate и @Enddate
Заказ по EntryDate
Выберите @седла = КОАЛЕСЦИРУЮТ(@гуара + ',',") + функции quotename( конвертировать(тип varchar(10),EntryDate) )
--Из (выбрать различные функции datepart(день, EntryDate) как EntryDate от #Dates26 ) Т
FROM (выберите DISTINCT EntryDate как EntryDate FROM #Dates26 ) T
Заказ по EntryDate
--SET @cols = STUFF(@cols, 1, 1, ")
SET @query =
N ' with cte as (SELECT *,(select sum(prdqty) from Probale where CONVERT(varchar(10), EntryDate) =stat.ddate ) as total
FROM (SELECT Descriptionitem,Probale.prdqty,
Конвертация(varchar(10),Probale.EntryDate) как DDate
Из Probale слева присоединяйтесь к ItemMasterFile на ItemMasterFile.Codeitem=Probale.Codeitem
где Пробале.DelID - это Null и Probale.EntryDate между @StartDate и @Enddate )prd
PIVOT (Sum(prdqty) FOR DDate IN (' + @cols + ')) Как стат)
выберите * из cte
союз всех
выберите 0,'+@sum+', (select sum(prdqty ) from Probale ) from cte'
метод exec sp_executesql процедура запроса@, Н@начальная дата типа datetime,@enddate в тип datetime', @начальная дата=@дата StartDate,@параметр enddate=@enddate в
КОНЕЦ
)
приходит ошибка ( недопустимое имя столбца "ddate".)