2016-02-05 60 views
0

有許多類似的問題,但不完全是我想要的,我保留提問一個問題,所以原諒我,如果這是一個重複,因爲我無法準確找到我通緝。將來自2個不同查詢的不同列組合成一個結果集

我有一個查詢:

SELECT TOP 1 t1.Col1, t1.Col2, <need_to_append_here> 
FROM t1 
LEFT OUTER JOIN t2 
ON t1.Id = t2.Id 
WHERE t1.Id = 'x' 
ORDER BY t2.Col2 DESC 

如果您看到need_to_append_here,我需要一個完全不同的SQL,所以我得到追加到4分的結果列在結果集:

SELECT t3.Col3, t3.Col4 FROM t3 WHERE t3.Id = 'z' 

我應該看到一行用Col1中,col2的,COL3,COL4

UPDATE 我能得到它的工作,但是從第二查詢通過執行類似

SELECT * FROM (SELECT TOP 1 t1.Col1, t2.Col2, (SELECT t3.Col3..) Col3 
FROM .... 

但我無法包含一列兩列在第2個選擇

+0

不能僅僅加上'JOIN T3 ON t3.Id =「z''? – JamieD77

回答

2

你可以JOIN(或LEFT JOIN),因爲你正在做的TOP 1

SELECT TOP 1 
     t1.Col1, 
     t1.Col2, 
     t3.Col3, 
     t3.Col4 
FROM t1 
     LEFT OUTER JOIN t2 ON t1.Id = t2.Id 
     LEFT OUTER JOIN t3 ON t3.Id = 'z' 
WHERE t1.Id = 'x' 
ORDER BY t2.Col2 DESC 
1

如果附加查詢簡單地返回一行,您可以使用CROSS JOIN將其追加到原始查詢:

SELECT TOP 1 t1.Col1, t1.Col2, t3.Col3, t3.Col4 
FROM t1 
LEFT OUTER JOIN t2 ON t1.Id = t2.Id 
CROSS JOIN (
    SELECT t3.Col3, t3.Col4 
    FROM t3 
    WHERE t3.Id = 'z') AS t3(Col3, Col4) 
WHERE t1.Id = 'x' 
ORDER BY t2.Col2 DESC 
+0

你的答案有效,但左連接的其他答案似乎更簡單。希望我能給你兩個信用。儘管非常感謝你 – TimJohnson

0

您可以使用此作爲例子:

select t1.ks, t1.[# Tasks], coalesce(t2.[# Late], 0) as [# Late] 
from 
    (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 
left join 
    (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2 
on 
    t1.ks = t2.ks 
相關問題