在SQL Server中动态透视的两列之间是否可能存在差异?
我正在以以下格式获取@sql的值: 格式1:-在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
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我创建了一个存储过程,其中,当我传递值时,我得到的输出就像我包含的第一种格式一样。我将发布我的存储过程,在传递值时,我得到的输出是上面提到的格式。