2015-11-26 222 views
0

我有一個大的SQL表和我有回報以下查詢的一些基本信息:嵌套SQL SELECT

SELECT 
    CustomerID AS "Customer Name" 
    ,COUNT(ID) AS "Total Emails" 
FROM EmailDatas WHERE Expired = 0 
GROUP BY CustomerID 

結果

Customer Name   Total Emails 
A      1000 
B      9200 
C      11400 

我所試圖做的就是計數電子郵件在同一查詢返回今天的日期,類似的:

結果

Customer Name   Total Emails   Emails Today 
A      1000     34 
B      9200     7 
C      11400     54 

我可以修改原來的查詢返回的信息:

SELECT 
    CustomerID AS "Customer Name" 
    ,COUNT(ID) AS "Total Emails" 
FROM EmailDatas WHERE Expired = 0 and starttime > getdate() 
GROUP BY CustomerID 

我需要的是基本上有這兩個查詢組合。

希望這是有道理的。

謝謝!

+0

什麼'這裏starttime' ??? – Abbas

+0

請用你正在使用的數據庫標記你的問題。 –

+0

使用的標記dbms。 (您正在使用產品特定的功能。) – jarlh

回答

2

您可以使用條件聚合。像這樣的:

SELECT CustomerID AS "Customer Name", 
     COUNT(ID) AS "Total Emails", 
     SUM(CASE WHEN CAST(starttime as date) = CAST(getdate() as date) THEN 1 ELSE 0 END) as "Today's" 
FROM EmailDatas 
WHERE Expired = 0 
GROUP BY CustomerID; 
0

你也可以這樣做。

select t1.CustomerName,t1.TotalEmails, 
case when t2.EmailsToday is null then 0 
else t2.EmailsToday end as EmailsToday 
    from (SELECT 
     CustomerID AS CustomerName 
     ,COUNT(ID) AS TotalEmails 
     FROM EmailDatas WHERE Expired = 0 
     GROUP BY CustomerID) t1 
    left join 
     (SELECT 
     CustomerID AS CustomerName 
     ,COUNT(ID) AS EmailsToday 
     FROM EmailDatas WHERE Expired = 0 and starttime > getdate() 
     GROUP BY CustomerID) t2 
    on t1.CustomerName=t2.CustomerName 
0

這應該工作

SELECT 
t1.CustomerID AS [Customer Name], 
t1.[Total Emails], 
t2.[Emails Today] 
FROM 
(SELECT 
CustomerID 
,COUNT(ID) AS [Total Emails] 
FROM EmailDatas WHERE Expired = 0 
GROUP BY CustomerID) AS t1 LEFT OUTER JOIN 
(SELECT 
CustomerID 
,COUNT(ID) AS [Emails Today] 
FROM EmailDatas WHERE Expired = 0 and starttime > getdate() 
GROUP BY CustomerID) AS t2 
ON t1.CustomerID = t2.CustomerID