Sql 动态轴中的行总数

Sql 动态轴中的行总数,sql,sql-server,Sql,Sql Server,我正在创建一个在Dynamic Pivot中包含行总数的报告。 如何使用它 下面是我的代码: 声明@Query VARCHAR8000 DECLARE @Col VARCHAR(8000) DECLARE @whse VARCHAR(20) Declare @dDate VARCHAR(20) DECLARE @itemcode VARCHAR(8000) Declare @shift varchar(20) Declare @DocEntry VARCHAR(MAX) DECLARE @isn

我正在创建一个在Dynamic Pivot中包含行总数的报告。 如何使用它

下面是我的代码:

声明@Query VARCHAR8000

DECLARE @Col VARCHAR(8000)
DECLARE @whse VARCHAR(20)
Declare @dDate VARCHAR(20)
DECLARE @itemcode VARCHAR(8000)
Declare @shift varchar(20)
Declare @DocEntry VARCHAR(MAX)
DECLARE @isnullCol VARCHAR(8000)

Set @dDate =/* SELECT convert(varchar(15),Max(T0.DocDate),112) 
FROM OINM T0 WHERE T0.DocDate = */ convert(varchar(15),'20190602',112)

Set @whse = (Select max(a1.WhsCode) 
From OWHS a1 Where a1.WhsCode='A3 P-FG')

Set @shift = (select max(a2.u_shift)  
from OQUT a2 where a2.u_shift='2nd Shift')

SET @itemcode =  isnull( STUFF((Select DISTINCT ',  ''' + T1.ITEMCODE+'''' 
from OWTQ T0 
INNER JOIN WTQ1 t1 ON T0.DOCENTRY=T1.DOCENTRY
where t0.Docdate=@dDate AND T1.[FromWhsCod]=@whse 
and t0.u_Shift=@shift FOR XML PATH('')),1,1,'') ,0)

SET @DocEntry =  isnull( STUFF((Select distinct  ',' +     convert(varchar(10),T0.DocEntry) 
from OWTQ T0 INNER JOIN WTQ1 t1 ON T0.DOCENTRY=T1.DOCENTRY
where t0.Docdate=@dDate AND T1.[FromWhsCod]=@whse 
and t0.u_Shift=@shift FOR XML PATH('')),1,1,'') ,0)



SELECT  @Col = STUFF(( SELECT DISTINCT '],[' + ltrim((t1.whscode)) 
from OWTQ T0  INNER JOIN WTQ1 T1 ON T0.DocEntry = T1.DocEntry
where T0.Docdate=@dDate and T1.[FromWhsCod]=@whse 
and t0.u_Shift like '%'+@shift+'%' 
ORDER BY '],[' + ltrim((t1.whscode)) 
FOR XML PATH('') ), 1, 2, '') + ']'

SELECT @col += ',[RTotal]'
SELECT @isnullCol = 
SUBSTRING((SELECT DISTINCT ',ISNULL(['+t1.whscode+'],0) AS ['+whscode+']' 
from OWTQ T0  INNER JOIN WTQ1 T1 ON T0.DocEntry = T1.DocEntry
where T0.Docdate=@dDate and T1.[FromWhsCod]=@whse 
and t0.u_Shift like '%'+@shift+'%' 
FOR XML PATH('')),2,8000)

SELECT @isnullCol += ',ISNULL([RTotal],0) AS [Total]'



Set @Query = 
'Select  pvt.itemcode,'+@isnullCol+' from 
(Select ISNULL(CAST(Itemcode AS         
VARCHAR(50)),''RTotal'')Itemcode,t1.whscode,sum(t1.Quantity) as Total
FROM OWTQ T0 INNER JOIN WTQ1 T1 ON T0.DocEntry=T1.DocEntry
Where convert(varchar(15),T0.Docdate,112) = 
convert(varchar(15),'+@dDate+',112)  and t1.itemcode IN ('+ @itemcode +') 
and t0.DocEntry IN (' + @DocEntry + ')
group by t1.itemcode,t1.whscode )src
PIVOT (SUM(Total) For WhsCode IN ('+@Col+')) as pvt'

EXECUTE (@Query)

执行脚本时出现了什么错误?您好,我只想问一下如何获取动态数据透视中的行总数,目前还不清楚。您可以在问题中添加一些示例数据和预期输出。您好,先生。很抱歉,我第一次在stackoverflow发布。我已附加图片。您需要在另一列中添加19-O+A26-O A3 S-FG?在此脚本中,选择pvt.itemcode,“++@isnullCol+”,“++@isnullCol+”,返回值加倍。当我替换为选择pvt.itemcode,“+@isnullCol+”,“@isnullCol_total”时,我得到错误消息174,级别15,状态1,第1行,isnull函数需要2个参数。Msg 102,级别15,状态1,第8行“src”附近的语法不正确。变量名错误。我已经更新了。如果仍然存在问题,请打印脚本而不是执行,并手动检查脚本中是否存在其他问题。获取错误。我基本上创建了总表单,即您使用stuff生成的列名。但对于total计算,您需要为所有列添加ISNULL检查,并在null时替换为零。我现在不在家,你能自己试试吗。我以后可以帮你。这个想法是,新的isnullcol_总数应该是-isnullcol_1,0+isnullcol_2,0+。。。。。。total在填充变量@isnullCol_total时做了一些调整。您现在可以检查一下吗?还有ISNULL参数问题。你可以查一下。
--Declare another variable as-
DECLARE @isnullCol_total VARCHAR(8000)

--Remove the following line from your script-
SELECT @isnullCol += ',ISNULL([RTotal],0) AS [Total]'

--Add this script to set value to newly declared variable
SET @isnullCol_total = REPLACE(@isnullCol,',','+')
SET @isnullCol_total = REPLACE(@isnullCol_total,'[','ISNULL([')+')'
SET @isnullCol_total = '('+REPLACE(@isnullCol_total,']','],0)')+' AS Total'

--You also have issue with ISNULL where you have some Sytax issue.
--The correct syntax should be as below-
ISNULL(CAST(Itemcode AS VARCHAR(50)),RTotal) Itemcode,

--Now write your dynamic SQL as below
Set @Query = 
'Select  pvt.itemcode,'+@isnullCol+' ,'+@isnullCol_total+' from 
(Select 
ISNULL(CAST(Itemcode AS VARCHAR(50)),RTotal) Itemcode,
t1.whscode,sum(t1.Quantity) as Total
FROM OWTQ T0 INNER JOIN WTQ1 T1 ON T0.DocEntry=T1.DocEntry
Where convert(varchar(15),T0.Docdate,112) = 
convert(varchar(15),'+@dDate+',112)  and t1.itemcode IN ('+ @itemcode +') 
and t0.DocEntry IN (' + @DocEntry + ')
group by t1.itemcode,t1.whscode )src
PIVOT (SUM(Total) For WhsCode IN ('+@Col+')) as pvt'

EXECUTE (@Query)