在SQL Server中动态透视的两列之间是否可能存在差异?

在SQL Server中动态透视的两列之间是否可能存在差异?,sql,sql-server,Sql,Sql Server,我正在以以下格式获取@sql的值: 格式1:- Customer Organization_Name Kpi_Name [2020-01-23] [2020-01-24] -------------------------------------------------------------- Adidas BioLife Customer Survey 78 78 Adidas

我正在以以下格式获取@sql的值: 格式1:-

Customer   Organization_Name  Kpi_Name        [2020-01-23]   [2020-01-24]
    --------------------------------------------------------------
 Adidas         BioLife       Customer Survey      78              78
 Adidas         BioLife       EH&S Audit           52              52
 SELECT @sql = 'select *


FROM
(select CUSTOMER,RunDate,
            Organization_Name,KPI_Name,
            Measure
     FROM _Result.VW_Result where RunDate in ('+@column0+') and CUSTOMER='''+@CustomerName+'''
                AND Result_Type = '''+@ResultType+''') x
PIVOT 
(
    sum(measure)
    for [rundate] in ('+@column+')
) P';
             EXEC SP_EXECUTESQL
                  @sql;
--print @sql

             SELECT @column1 = COALESCE(@column1+',', '')+QUOTENAME(R)
             FROM
             (
                 SELECT DISTINCT
                        RunDate R
                 FROM _Result.VW_Result
                  WHERE RunDate = CONVERT(NVARCHAR(10), @currentRundate)
                       OR RunDate=CONVERT(NVARCHAR(10), @PreviousRundate)
             ) AS x1;
             PRINT @COLUMN1;
       -- print @sql
             SET @column11 = ''''+REPLACE(replace(replace(@column1, '[', ''), ']', ''), ',', ''',''')+'''';
             SELECT @sql1 = 'select * 
 FROM
(select CUSTOMER,RunDate,
            Organization_Name,KPI_Name,
           Measure
     FROM _Result.VW_Result where RunDate in ('+@column11+') and CUSTOMER='''+@CustomerName+'''
                AND Result_Type = '''+@ResultType+''' ) x
PIVOT 
(
    count(Measure)
    for [rundate] in ('+@column1+')
) P';
--print @sql1    
--group by CUSTOMER,RunDate,
            --Organization_Name,KPI_Name  
             EXEC SP_EXECUTESQL
                  @sql1; 
    -- print @sql      

     END;
}
这是我的sp:-

下面是我传递值的一些参数

 Create PROCEDURE [_RUN].[GetMeasureOrganization] @CurrentRundate  DATE,
                                        @PreviousRunDate DATE,
                                                @CustomerName    VARCHAR(100),
                                                @ResultType      NVARCHAR(256)



    AS
         BEGIN

             SET NOCOUNT ON;
在这里,我声明变量:-

DECLARE @column AS NVARCHAR(MAX);
     DECLARE @column0 NVARCHAR(MAX);
     DECLARE @column01 NVARCHAR(MAX);
     DECLARE @column1 NVARCHAR(MAX);
     DECLARE @column11 NVARCHAR(MAX);
     DECLARE @sql AS NVARCHAR(MAX);
     DECLARE @sql1 NVARCHAR(MAX);

     BEGIN
这就是我使用distinct命令进行两次约会的方式

  SELECT @column = COALESCE(@column+',', '')+QUOTENAME([R])
         FROM
         (
             SELECT DISTINCT
                    RunDate R
             FROM _Result.VW_Result
             WHERE RunDate = CONVERT(NVARCHAR(10), @currentRundate)
                   OR RunDate=CONVERT(NVARCHAR(10), @PreviousRundate)
         ) AS x1;
  --  print @column01
         SET @column0 = ''''+REPLACE(replace(replace(@column, '[', ''), ']', ''), ',', ''',''')+'''';
这是我的SQL查询部分,在这里我可以得到类似Format1的值:-

Customer   Organization_Name  Kpi_Name        [2020-01-23]   [2020-01-24]
    --------------------------------------------------------------
 Adidas         BioLife       Customer Survey      78              78
 Adidas         BioLife       EH&S Audit           52              52
 SELECT @sql = 'select *


FROM
(select CUSTOMER,RunDate,
            Organization_Name,KPI_Name,
            Measure
     FROM _Result.VW_Result where RunDate in ('+@column0+') and CUSTOMER='''+@CustomerName+'''
                AND Result_Type = '''+@ResultType+''') x
PIVOT 
(
    sum(measure)
    for [rundate] in ('+@column+')
) P';
             EXEC SP_EXECUTESQL
                  @sql;
--print @sql

             SELECT @column1 = COALESCE(@column1+',', '')+QUOTENAME(R)
             FROM
             (
                 SELECT DISTINCT
                        RunDate R
                 FROM _Result.VW_Result
                  WHERE RunDate = CONVERT(NVARCHAR(10), @currentRundate)
                       OR RunDate=CONVERT(NVARCHAR(10), @PreviousRundate)
             ) AS x1;
             PRINT @COLUMN1;
       -- print @sql
             SET @column11 = ''''+REPLACE(replace(replace(@column1, '[', ''), ']', ''), ',', ''',''')+'''';
             SELECT @sql1 = 'select * 
 FROM
(select CUSTOMER,RunDate,
            Organization_Name,KPI_Name,
           Measure
     FROM _Result.VW_Result where RunDate in ('+@column11+') and CUSTOMER='''+@CustomerName+'''
                AND Result_Type = '''+@ResultType+''' ) x
PIVOT 
(
    count(Measure)
    for [rundate] in ('+@column1+')
) P';
--print @sql1    
--group by CUSTOMER,RunDate,
            --Organization_Name,KPI_Name  
             EXEC SP_EXECUTESQL
                  @sql1; 
    -- print @sql      

     END;
}
我想用下面的格式得到两个旋转柱之间的差异。我想知道这是否可能

 Customer   Organization_Name  Kpi_Name    [2020-01-23]   [2020-01-24]  Difference
    --------------------------------------------------------------------------
  Adidas      BioLife       Customer Survey      78          78            0
  Adidas      BioLife       EH&S Audit           52          52            0

您提供的SQL不会给出您显示给我们的结果。您正在运行的实际SQL是什么?如果
RunDate
的值超过2(或1),该怎么办?你的实际数据是什么样子的?你能在不将结果插入临时表的同时包含给出输出的代码吗?然后从临时表中编写一个查询来给出差异?@larnu我创建了一个存储过程,其中,当我传递值时,我得到的输出就像我包含的第一种格式一样。我将发布我的存储过程,在传递值时,我得到的输出是上面提到的格式。