根据参数是否等于另一个表字段,我的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
DISTINCT
和GROUP BY
的工作方式类似,但DISTINCT
适用于所有列值,甚至是由表达式计算的列值。