0

内部結合に成功した2つのクエリがあります

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
)
4

3 に答える 3

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 を使用する習慣を身につけてください。

于 2013-09-27T09:10:07.107 に答える