2011-07-11 89 views
0
SELECT COUNT(WiningComment) AS 'WinningAnswers' 
FROM Threads 
WHERE WiningComment IN (SELECT CommentsID 
FROM Comments 
WHERE [email protected]) 

UNION ALL 
SELECT COUNT(CommentsID) AS 'TotalAnswers' 
FROM Comments 
WHERE [email protected] 

我希望TotalAnswers和WinningAnswers顯示爲兩個獨立的列。但是,當我測試查詢時,我得到一行兩個數字...加入選擇語句的問題

+0

是的 - 這就是'UNION'所做的 - 根據定義。如果你想要一個單行,兩列,你需要有一個單一的'SELECT'與兩個subselects .. –

回答

1
SELECT (
    SELECT COUNT(WiningComment) 
    FROM Threads 
    WHERE WiningComment IN (SELECT CommentsID 
    FROM Comments 
    WHERE [email protected]) 
) as 'WinningAnswers', 
(
    SELECT COUNT(CommentsID) 
    FROM Comments 
    WHERE [email protected] 
) as 'TotalAnswers' 
+0

謝謝,它的工作,Petar – WithFlyingColors

0

這不能做,如果您使用聯合,列名稱在兩個查詢中必須相同。嘗試進行單個查詢。

1

這就是聯盟所做的......它創建了兩個數據集的聯合

(1,2,3) UNION (4,5,6) = (1,2,3,4,5,6) 

你基本上有兩個單獨的查詢,所以你應該可能只做兩個單獨的查詢。

2

UNION運算符按定義連接兩個結果集併合並它們的行 - 兩個結果集=至少兩行。

你在找什麼東西像一個單一的SELECT有兩個子選擇來獲取這些值:

SELECT 
    (SELECT COUNT(WiningComment) 
    FROM dbo.Threads t 
    INNER JOIN dbo.Comments c ON t.WiningComment = c.CommentsID 
    WHERE UsersID = @UserID) AS 'WinningAnswers', 

    (SELECT COUNT(CommentsID) 
    FROM dbo.Comments 
    WHERE UsersID = @UserID) AS 'TotalAnswers' 
0

比如,你可以做分組的一點點:

SELECT MAX(WinningAnswers) AS 'WinningAnswers', MAX(TotalAnswers) AS 'TotalAnswers' 
FROM (
    SELECT t.UsersID, COUNT(t.WiningComment) AS 'WinningAnswers', 0 AS 'TotalAnswers' 
    FROM Threads t 
     JOIN Comments c ON c.CommentsID = t.WiningComment 
    WHERE t.UsersID = @UserID 
    UNION ALL 
    SELECT UsersID, 0 AS 'WinningAnswers', COUNT(CommentsID) AS 'TotalAnswers' 
    FROM Comments 
    WHERE UsersID = @UserID 
) AS Total 
GROUP BY UsersID; 

或者,考慮到您的第二個查詢只返回一條記錄,您可以簡單地:

SELECT COUNT(t.WiningComment) AS 'WinningAnswers', Total.TotalAnswers AS 'TotalAnswers' 
FROM (
     SELECT COUNT(CommentsID) AS 'TotalAnswers' 
     FROM Comments 
     WHERE UsersID = @UserID 
    ) AS Total, Threads t 
    JOIN Comments c ON c.CommentsID = t.WiningComment 
WHERE t.UsersID = @UserID;