[英]SQL Server : SELECT with DISTINCT on variable multiple columns
我需要计算该表中不同项目的数量,但不同的是存储在变量中的许多列。 这是 2 个请求。
要求 1:
SELECT COUNT(DISTINCT (CHECKSUM(code_paiement,id_emetteur,id_liaison)))
FROM [DB1].[dbo].[Vo_Fait]
要求 2:
declare @var nvarchar(4000) = 'code_paiement, id_emetteur, id_liaison'
SELECT COUNT(DISTINCT (CHECKSUM(@var)))
FROM [DB1].[dbo].[Vo_Fait]
但是这 2 个请求的结果是不同的!
在“req2”中,您正在获取字符串“code_paiement,id_emetteur,id_liaison”的校验和,它总是相同的,并计算它的不同值,它总是为 1。
这样想:您的代码简化为:
SELECT COUNT(DISTINCT (CHECKSUM('code_paiement,id_emetteur,id_liaison')))
FROM [DB1].[dbo].[Vo_Fait]
...与以下内容相同:
SELECT COUNT(DISTINCT (-1998057055))
FROM [DB1].[dbo].[Vo_Fait]
因此,您正在计算表中每一行的数字 -1998057055 的不同出现次数; 由于每一行的值都相同,因此只有一个不同的事件。
如果你真的需要动态构建你的 SQL 代码(通常你应该通过改变你的设计来避免这种情况),那么你应该使用类似exec
或sp_executesql
东西。 一个简单的例子:
DECLARE @var NVARCHAR(4000) = 'code_paiement,id_emetteur,id_liaison';
DECLARE @sql NVARCHAR(4000)='SELECT COUNT(DISTINCT(CHECKSUM(' + @var + '))) FROM [DB1].[dbo].[Vo_Fait]';
EXEC (@sql);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.