我有一个Server表,其中包含9列,用于指示在UI的一部分中包含或排除哪些内容。每一列的值都可以是'A‘、'X’或空白。每一行在任何列中最多应有1 'A‘。
由于一个错误,许多列有多个'A‘值。如何编写返回打破此约束的每一行的查询?
我所拥有的只是:
SELECT PrimaryKey
FROM Criteria C
WHERE (C.First = 'A' AND C.Second = 'A')
OR (C.First = 'A' AND C.Third = 'A')
OR (C.First = 'A' AND C.Fourth = 'A')
...
OR (C.Eighth = 'A' AND C.Ninth = 'A')是否有任何更简洁或更优雅的方式来编写这些代码?
发布于 2020-03-16 15:57:19
您可以使用APPLY
SELECT C.*
FROM Criteria C CROSS APPLY
(SELECT COUNT(*) as num_a_s
FROM (VALUES (First), (Second), . . . -- list all the columns here
) V(x)
WHERE v.x = 'A'
) v
WHERE v.num_a_s >= 2;注意:如果将这些值存储在列中而不是单独的行中,则数据模型可能有问题。
https://stackoverflow.com/questions/60708808
复制相似问题