2011-07-12 31 views
1

多分、誰かが私をここで助けることができます... 私はSQL文にわずかな問題があります。 (MSオン - SQL Server 2008の) だから私はこのSQL - 複数のテーブル結合

ID /会社/月/ ClosedTimeStamp /異なる情報

のように見える6つの表は、今私は(1つのステートメントでpreferrable:P)が必要にしているデータセットの数は、 CompanyとMonthでグループ化された各テーブルから、このような表示になります。 そして、私はすべてのテーブルのためにこれを行うと、ちょうど選ぶことができます

SELECT COUNT(*) as c, Month, Company 
FROM Table1 WHERE ClosedTimeStamp IS NULL 
GROUP BY Company, Month 
ORDER BY Company 

COUNT(*)に対する結果として0が存在することができるようにしていないすべてのテーブルは、その会社とその月のデータを持っている必要があります別のものがあります各企業の業績...まあ、誰かが任意のアイデアを持っている場合、私は本当にそれをいただければ幸いです:)

申し訳ありませんが忘れてしまった何か...結果は次のようになります。

会社/月/ CountTable1/CountTable2/CountTable3/..... テスト02 1 0 50

1つのステートメントではうまくいかない場合は、別の方法で動作させる必要があります。あなたが各テーブルの合計をしたい場合:)その後、

おかげ

リム

+0

あなたはほぼ同じ構造を持つ6つのテーブルを持っていますか? )あなたの注文は恐らく 'Firma 'ではなく' Company 'によって注文されるべきです; – Jacob

+0

ああ、申し訳ありません:Pはそれを置き忘れました – Lim

+0

もちろん、1つのステートメントで可能です。私の答えを確認してください –

答えて

1

DBが正規化されていれば、クエリははるかに簡単になります。

あなたcompanyMonthは、6つのテーブルに分散され、私たちのような、すべてのcompany + monthの明確なデータセットを得るためにそれらのテーブルのunionを行う必要があり、そのため:

select company, month from table1 
union 
select company, month from table2 
union 
select company, month from table3 
union 
select company, month from table4 
union 
select company, month from table5 
union 
select company, month from table6 

。なお、同じ会社+月のペアが繰り返されることを望まないため、union allではなくunionが必要です。

すると、ちょうど各テーブルのための数量を照会するために、このデータセットを使用します。

select t.company, t.month, 
    (select count(*) from table1 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt1, 
    (select count(*) from table2 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt2, 
    (select count(*) from table3 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt3, 
    (select count(*) from table4 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt4, 
    (select count(*) from table5 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt5, 
    (select count(*) from table6 
     where company = t.company 
     and month = t.month 
     and ClosedTimeStamp is null) as qt6 
from (
    select company, month from table1 
    union 
    select company, month from table2 
    union 
    select company, month from table3 
    union 
    select company, month from table4 
    union 
    select company, month from table5 
    union 
    select company, month from table6 
) t 
order by t.company 
+0

wow thanks that works :) – Lim

2

UNION ALLテーブルの行とは、一列に、会社を数

SELECT COUNT(*) as c, Month, Company 
FROM 
(
SELECT Month,Company FROM Table1 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company FROM Table2 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company FROM Table3 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company FROM Table4 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company FROM Table5 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company FROM Table6 WHERE ClosedTimeStamp IS NULL 
) AS t 
GROUP BY Company, Month 
ORDER BY Company 

を行う

SELECT SUM(t1) t1,SUM(t2) t2,SUM(t3) t3,SUM(t4) t4,SUM(t5) t5,SUM(t6) t6, Month, Company 
FROM 
(
SELECT Month,Company, 1 t1,0 t2, 0 t3, 0 t4, 0 t5, 0 t6 FROM Table1 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company, 0 t1,1 t2, 0 t3, 0 t4, 0 t5, 0 t6 FROM Table2 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company, 0 t1,0 t2, 1 t3, 0 t4, 0 t5, 0 t6 FROM Table3 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company, 0 t1,0 t2, 0 t3, 1 t4, 0 t5, 0 t6 FROM Table4 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company, 0 t1,0 t2, 0 t3, 0 t4, 1 t5, 0 t6 FROM Table5 WHERE ClosedTimeStamp IS NULL 
UNION ALL 
SELECT Month,Company, 0 t1,0 t2, 0 t3, 0 t4, 0 t5, 1 t6 FROM Table6 WHERE ClosedTimeStamp IS NULL 
) AS t 
GROUP BY Company, Month 
ORDER BY Company 
+0

これはちょうど私にすべてのテーブル/コンパスは私が探しているものではなく、カウントを取得します結果はこのようになります 会社/月/ CountTable1/CountTable2/CountTable3/..... テスト02 1 0 50 – Lim

+0

更新されました。代替 – niktrs

+0

を参照してくださいテーブルの名前を訂正するのを忘れました。必ずしも 'Table1'ではありません –

関連する問題