2017-03-17 120 views
0

我有3個查詢計算每個公司,某些月份的行數,來自3個不同的表,並返回相同的列:qty,month和company_name。加入3個分組值

取而代之,我需要返回1個具有相同3列的表,但qty必須總和所有3個分隔的查詢的值。

你可以建議加入或執行它的最佳方式,我不會放鬆執行速度。

下面是示例查詢之一,其他2個查詢已完全一樣的語法,只是代替T_CUSTSK,他們使用T_CUSTSK2T_CUSTSK3

SELECT 
    COUNT(*) as qty, 
    DATEPART (MONTH, [start_date]) AS [month], 
    T_SYSCOM.company_name 
FROM 
    T_CUSTSK 
INNER JOIN 
    T_SYSCOM ON T_CUSTSK.company_id = T_SYSCOM.company_id 
WHERE 
    DATEPART (MONTH, [start_date]) = 12 
GROUP BY 
    DATEPART (MONTH, [start_date]), T_SYSCOM.company_name 
ORDER BY 
    month, qty DESC 
+0

u能張貼一些樣品的輸入和輸出? – Teja

+0

您可以發佈T_CUSTSK和T_SYSCOM表的表模式嗎? – BipinR

+0

公司名稱是varchar(100),qty int –

回答

0

聯盟所有會結合您的查詢。
然後,您可以用凝聚另一個查詢包裝你的語句:

select sum(qty), month, company_name from (
Select count(*) as qty, datepart(month, [start_date]) as [month], T_SYSCOM.company_name 
from T_CUSTSK 
INNER JOIN T_SYSCOM 
ON T_CUSTSK.company_id=T_SYSCOM.company_id 
where datepart(month, [start_date])=12 
group by datepart(month, [start_date]), T_SYSCOM.company_name 
order by month, qty DESC 

union all 

<second query> 

union all 

<third query>) 

group by month, company_name 
+0

關鍵字'group'附近的語法不正確 –

0

試試這個,你可以做UNION ALL所有T_CUSTSKx表的子查詢,並與T_SYSCOM表一旦加入該結果。 我假設的起始日期是T_CUSTSK表

Select count(*) as qty, datepart(month, [start_date]) as [month], T2.company_name 
from (
SELECT company_id,start_date FROM T_CUSTSK 
UNION ALL 
SELECT company_id,start_date FROM T_CUSTSK2 
UNION ALL 
SELECT company_id,start_date FROM T_CUSTSK3 
) T1 
INNER JOIN @T_SYSCOM T2 
    ON T1.company_id=T2.company_id 
where datepart(month, [start_date])=12 
group by datepart(month, [start_date]), T2.company_name 
order by month, qty DESC 

請讓我知道,如果這個工程

+0

我應該提到,在2個查詢中,每個日期字段都有不同的名稱。 start_date1,start_date2,start_date3 –

+0

如果這些字段的名稱不同,那麼您在內部子查詢中將列名稱設置爲start_date。 「」SELECT company_id,start_date1 AS start_date FROM T_CUSTSK UNION ALL SELECT company_id,start_date2 AS start_date FROM T_CUSTSK1 UNION ALL SELECT company_id,start_date3 AS start_date FROM T_CUSTSK2「」 – BipinR