将两个不同 where 的查询合并为 1
Posted
技术标签:
【中文标题】将两个不同 where 的查询合并为 1【英文标题】:merge two queries with different where into 1 【发布时间】:2014-09-19 13:06:30 【问题描述】:我有一个如下的存储过程。
DECLARE @Temp TABLE
(...)
INSERT INTO @Temp
SELECT MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 1
INSERT INTO @Temp
SELECT MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 1
AND Col4 = 7000
SELECT SUM(col1) / SUM(col2) AS Percentage, MAX(), MeasureDate
FROM @Temp
GROUP BY MeasureDate
我在临时表中做了两次插入,第二次插入额外的 WHERE 但相同的列在同一张表中,然后我在临时表上执行 SUM(col1) / SUM(col2) 以返回我需要的结果。有没有办法将所有这些插入和选择合并到一个语句中,所以我不使用临时表并从 Table1 中进行一次选择?或者即使我仍然需要临时表,将选择合并为一个选择而不是两个单独的选择?存储过程可以正常工作,只是在寻找一种缩短它的方法。
谢谢。
【问题讨论】:
可以这样做,但您最好提供更多细节。不清楚为什么要将重复数据放入临时表中,如果这是一个要求或一个错误,并且在构建查询时会产生巨大的差异。 你说得对,我更正了查询,两个查询不同,一个是 where col3=2,另一个是 where col3=1 and col4=7000。这不是重复数据 【参考方案1】:SELECT MeasureDate, col1, col2
FROM Table1
WHERE Col3 = 2
or (Col3 = 1 AND Col4 = 7000);
SELECT sum(col1) / sum(col2) AS Percentage , GROUP BY MeasureDate
FROM Table1
WHERE Col3 = 2
or (Col3 = 1 AND Col4 = 7000)
GROUP BY MeasureDate;
【讨论】:
【参考方案2】:您可以将前两个查询中的条件与or
运算符结合起来:
SELECT SUM(col1) / SUM(col2) AS Percentage, MeasureDate
FROM Table1
WHERE (Col3 = 2) OR (Col3 = 1 AND Col4 = 7000)
GROUP BY MeasureDate
【讨论】:
以上是关于将两个不同 where 的查询合并为 1的主要内容,如果未能解决你的问题,请参考以下文章
如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码
C#,Linq2Sql:是不是可以将两个可查询对象合并为一个?
Microsoft Access 查询 - 将两个查询合并为一个