2013-09-27 38 views
0

應用外層我有兩個查詢已成功內部聯接是包裝兩個選擇語句

select t1.countResult, t2.sumResult from (
    select 
     count(column) as countResult 
    from tableA join tableB 
    on tableA.id = tableB.id 
    group by name 
)t1 inner join ( 
    select 
     sum(column) as sumResult 
    from tableA 
    join tableB 
    on tableA.id = tableB.id 
    group by name 
)t2 
on t1.name= t2.name 

上面的查詢將返回我的名字,並數和金額的相應數量。我需要在計數和總和之間進行比較。如果計數犯規匹配的總和,它會返回0,否則1。所以我的想法是實現另一個外層包裹他們和使用CASE WHEN。然而,我沒有申請一個外層只是爲了包裝起來?這是我試過的:

select * from(
    select t1.countResult, t2.sumResult from (
     select 
      count(column) as countResult 
     from tableA join tableB 
     on tableA.id = tableB.id 
     group by name 
    )t1 inner join ( 
     select 
     sum(column) as sumResult 
     from tableA 
     join tableB 
     on tableA.id = tableB.id 
     group by name 
    )t2 
    on t1.name= t2.name 
) 

回答

1

好的問題可以通過簡單地給外層分配一個名字來解決。

select * from(
select t1.countResult, t2.sumResult from (
    select 
     count(column) as countResult 
    from tableA join tableB 
    on tableA.id = tableB.id 
    group by name 
)t1 inner join ( 
    select 
    sum(column) as sumResult 
    from tableA 
    join tableB 
    on tableA.id = tableB.id 
    group by name 
)t2 
on t1.name= t2.name 
) as whatever //SQL Server need a name to wrap 

希望這將有助於任何新手和我一樣

+0

這將只顯示其中countresult = sumresult,使用的情況下,當一段時間,你可能想要的東西,以顯示這兩種記錄的記錄,但您實際顯示取決於你的case語句的結果。 –

+0

不,它會列出該countResult和sumResult每個名字。我已經測試過,它工作正常。 –

+0

對。不知何故,我用countresult = sumresult混合了t1.name = t2.name。對不起'回合! –

0

好了,到目前爲止,您已經選擇的一切你的第一選擇已經產生(有點沒用的,但你想要的東西開始;))

SELECT CASE 
WHEN countresult=sumresult THEN 'Equal' 
ELSE 'Not' 
END 
FROM (--your join select -- 
) 
0

我沒有任何樣本數據來測試該這樣可以去您的代碼。 您查詢的T1 T2 &外觀是相同的 - 你爲什麼不只是做一個總和&計數1步?

SELECT COUNT(column) AS countResult 
,SUM(column) AS sumResult 
FROM tableA INNER JOIN tableB 
    ON tableA.id = tableB.id 
GROUP BY name 

另外,你提到你是一個福利局 - 在SQL Server上的公用表表達式閱讀起來。 SQL 2005之前,你必須內... 獲取查詢中這些令人費解的查詢寫入到現在使用CTE的習慣。