Sql 动态轴中的行总数
我正在创建一个在Dynamic Pivot中包含行总数的报告。 如何使用它 下面是我的代码: 声明@Query VARCHAR8000Sql 动态轴中的行总数,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
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)