根据多个where子句命中记录,我希望SQL为每个匹配的where子句返回被命中行的副本。
c1 | c2 | c3
x y z
x,y,z:仅使用where c1=x or c3=z
我希望where c1=x or c3=z
返回2个x,y,z副本
这可以实现吗?
为什么?
我正在尝试消除运行多个查询以获取相同记录的倍数来进行优先级排序。
如果我运行两个查询,一个用于c1,一个用于c3,我可以而且应该得到两个x,y,z副本。
我想要设计这两个x,y,z副本,但我想运行一个查询。随着我的实施,我将遇到这样的情况,我将不得不运行超过10次查询旅行,以获得我想要的...一个优先记录。
我宁愿运行一个查询,而不是10。
答案 0 :(得分:3)
虽然它可能不像你想要的那样优雅,但它会这样做
SELECT c1,c2,c3 FROM [MyTableName] where c1=x
UNION ALL
SELECT c1,c2,c3 FROM [MyTableName] where c3=z
答案 1 :(得分:0)
已经回答,但这里有另一种选择:
SELECT c1,c2,c3
FROM [MyTableName]
JOIN (VALUES (1),(2)) t(n)
ON (t.n = 1 AND c1 = 'x') OR (t.n = 2 AND c3 = 'z');
答案 2 :(得分:0)
SELECT t.*
FROM MyTable t
CROSS APPLY (
VALUES
(c1,'x'),
(c2,'y'),
(c3,'z')
) f(col,val)
WHERE col = val