SQL Server的SELECT语句
问题描述:
我需要从表A返回行的查询,如果在表中的值X是不一样的Y值的总和从表B中对应的行(S)的问题是,有可能会或可能不是表B中对应于表A中的行的行,但如果表B中没有行,那么表A中的行仍应返回(因为表B中没有匹配的值)。就像一个LEFT OUTER连接场景,但是作为附加选择条件的比较是非常复杂的。SQL Server的SELECT语句
我有一个查询,则正好相反,即。如果表A中的值与表B中的行值相同,则返回行,但遗憾的是,这不是我所需要的!
SELECT TableA.id, TableA.bdate
FROM TableA
LEFT JOIN TableB ON TableB.ID = TableA.id
WHERE TableA.select_field = 408214
AND TableA.planned_volume =
(select sum(actual_volume)
from
TableB
where TableB.id = TableA.id)
ORDER BY TableA.id
任何帮助非常感谢。
答
WITH TotalVolumes
AS
(
SELECT id, SUM(actual_volume) AS total_volume
FROM TableB
GROUP
BY id
)
SELECT id, bdate, planned_volume
FROM TableA
EXCEPT
SELECT A.id, A.bdate, T.total_volume
FROM TableA AS A
JOIN TotalVolumes AS T
ON A.id = T.id;
答
SELECT TableA.id, TableA.bdate
FROM TableA
LEFT JOIN TableB ON TableB.ID = TableA.id
AND TableA.planned_volume <>
(select sum(actual_volume)
from
TableB
where TableB.id = TableA.id)
ORDER BY TableA.id
答
怎么是这样的:
SELECT TableA.Id, TableA.bdate
FROM TableA
LEFT JOIN
(
SELECT Id, SUM(actual_volume) AS b_volume
FROM TableB
GROUP BY Id
) AS TableBGrouping
ON TableBGrouping.Id= TableA.Id AND TableA.planned_volume <> b_volume
ORDER BY TableA.Id
你的样品查询只从项目属性表A,所以我想表B只使用存在量化之中。正确? – onedaywhen 2012-03-02 15:27:01
“但是如果有表B中没有任何行” - 你的意思一)表B是空集(字面解释),b)使用普通'id'属性没有匹配行,c)使用匹配'id'找不到匹配的行和'Y'的总和表达,d)别的东西? – onedaywhen 2012-03-02 15:28:35
回答你的第一个问题......这是正确的 - 要返回刚刚从TableA的领域,但资格TableB中是不等于planned_value场TableA上 – epx 2012-03-02 15:30:30