2012-03-02 140 views
0

我需要從表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 

任何幫助非常感謝。

+0

你的樣品查詢只從項目屬性表A,所以我想表B只使用存在量化之中。正確? – onedaywhen 2012-03-02 15:27:01

+0

「但是如果有表B中沒有任何行」 - 你的意思一)表B是空集(字面解釋),b)使用普通'id'屬性沒有匹配行,c)使用匹配'id'找不到匹配的行和'Y'的總和表達,d)別的東西? – onedaywhen 2012-03-02 15:28:35

+0

回答你的第一個問題......這是正確的 - 要返回剛剛從TableA的領域,但資格TableB中是不等於planned_value場TableA上 – epx 2012-03-02 15:30:30

回答

0
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; 
+0

onedaywhen,你已經破解了,但現在我需要添加一些製作的第一行返回,如: - 選擇-1作爲BATCH_ID, '{決定}' AS Batch_Date UNION和SELECT ... UNION不似乎去用:-( – epx 2012-03-02 15:54:19

+0

好的,知道了,THX onedaywhen – epx 2012-03-02 16:02:10

0
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 
+0

一個「planned_volume」不存在,不工作,因爲如果在表A,但沒有在表b行,然後不返回任何結果 – epx 2012-03-02 14:47:31

+0

稍微改變它,再試一次。 – 2012-03-02 14:48:17

+0

對不起,太微妙了我,但我已經使用<>試過了,但它不返回我需要什麼 – epx 2012-03-02 14:51:33

1

怎麼是這樣的:

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