在区分大小写的字段上不同时重复记录



根据参数是否等于另一个表字段,我的SP返回一个BIT列。

SELECT DISTINCT
table.[f1],
table.[f2],
--Many more fields
CASE WHEN table.MyField = @param THEN 1 ELSE 0 END AS col
--Where condition not relevant

所述列位于大型DISTINCT语句中。当列为真时,它被"区分"。并复制记录,而我只需要一个:如果匹配,则为true,否则为false。

它是这样返回的:

f1   f2   flag
FOO  BAR  0
FOO  CAR  0
GOO  BAR  1
GOO  BAR  0

我需要这个:

f1   f2   flag
FOO  BAR  0
FOO  CAR  0
GOO  BAR  1

我尝试在CASE块内使用子查询,并将生成的列拉出不同的。第一个选项给了我错误的结果集,第二个选项没有聚合。最后一次尝试,我将所有内容包装在另一个SELECT中,并使用GROUP BY:

SELECT * FROM (
SELECT DISTINCT
table.[f1],
table.[f2],
CASE WHEN table.MyField = @param THEN 1 ELSE 0 END AS col
) AS t GROUP BY f1, f2

在使用了一段时间后,它要么给我相同的结果,要么在汇总字段上出现错误。添加where条件会给我各种错误的结果集。

您发布的内容显示您想要这些字段组合的最大值标志值,而不仅仅是不同的行。您可以使用GROUP BY:

SELECT f1,f2, MAX(IIF(MyField=@param,1,0)) as Flag
FROM Table1
GROUP BY f1,f2

DISTINCTGROUP BY的工作方式类似,但DISTINCT适用于所有列值,甚至是由表达式计算的列值。

最新更新