2011-11-17 94 views
0

我有兩個選擇哪個我combinedto使其作爲一個工作:結合兩種選擇

SELECT  dbo.doss.dosno, dbo.doss.dosnm, SUM(dbo.kbpres.uur) AS somuur, SUM(dbo.kbpres.minuut) AS somminuut, CAST(SUM(dbo.kbpres.uur) + SUM(dbo.kbpres.minuut) 
       /60 AS VARCHAR(4)) + 'u ' + CAST(SUM(dbo.kbpres.minuut) % 60 AS VARCHAR(2)) + 'm' AS derivedColumn, SUM((dbo.kbpres.uur * 60 + dbo.kbpres.minuut) 
        * dbo.kbpres.prijs) AS TotalCost, dbo.doss.behdr, NULL AS FACKOSTEN 
FROM   dbo.kbpres INNER JOIN 
        dbo.doss ON dbo.kbpres.ino = dbo.doss.ino 
WHERE  (dbo.doss.dosno = '93690') 
GROUP BY dbo.doss.dosno, dbo.doss.behdr, dbo.doss.dosnm 
UNION 
SELECT  doss_1.dosno, doss_1.dosnm, NULL AS [somuur], NULL AS [somminuut], NULL AS [derivedColumn], NULL AS [TotalCost], doss_1.behdr, SUM(kbpres_1.prijs) AS FACKOSTEN 
FROM   dbo.kbpres AS kbpres_1 INNER JOIN 
        dbo.doss AS doss_1 ON kbpres_1.ino = doss_1.ino 
WHERE  (doss_1.dosno = '93690') AND (kbpres_1.soort = 'K') 
GROUP BY doss_1.dosno, doss_1.dosnm, doss_1.behdr,kbpres_1.soort 

Seperately它們會導致一排。所以現在我做了UNION,結果是兩行。但是我怎樣才能使這個結果在1行(1結果)?

+0

你不能從你描述的。你爲什麼想把它做成一排?它是用於報告還是表單UI?將數據回收並在客戶端進行一行。 – JonH

+0

是的,我爲某種報告。爲了便於測試,我使用dosno ='3690',但在live中,所有dosno都以visual studio的形式返回到datagridview中,所以它應該在每個dosno的同一行中。那麼我最好怎麼做呢? –

回答

0

你必須使用像子查詢:

選擇A,B,C,(SELECT d,E,F選自B WHERE等等等等)從WHERE等等等等GROUP由a.blah

0

你可以通過發佈你回來的兩行,以及你期望回來的那一行來詳細說明嗎?

因爲UNION將聚合您的選擇中具有不同值的所有行,所以您現在得到兩行並不奇怪。 (請注意,如果兩行是一樣的,UNION將他們凝聚到一個,而UNION ALL仍然會同時返回。)

我認爲你需要做的是這樣


SELECT ... 
FROM 
( 
    -- your query 
) q 
GROUP BY ... 

但再次,因爲你的行有不同的值,你可能會得到相同的結果集。我認爲發佈我之前提到的細節會爲您提供更好的答案。我很可能錯過了你想要一起做的事情,但很難根據你的帖子中的細節來判斷。

0

你將不得不擺脫工會,並加入。只要具有唯一的別名,您就可以多次加入同一個表。我會推薦的是,你使用doss表執行from語句,然後執行兩次kbpres連接。類似如下:

FROM dbo.doss 
INNER JOIN dbo.kbpres ON dbo.doss.ino = dbo.kbpres.ino 
INNER JOIN dbo.kbpres AS kbpres_1 ON dbo.doss.ino = dbo.AS kbpres_1.ino AND (kbpres_1.soort = 'K')