2011-11-17 56 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')