2011-12-05 58 views
0

我有一個表,這個數據替換觀點:與子查詢

ID | Date   | MacroID | FunctionID 
--------------------------------------- 
1 | 1.1.2010 10:00 | core  | coreP1 
2 | 2.1.2010 11:11 | main  | mainP7 
3 | 1.1.2010 17:01 | core  | coreP2 
4 | 3.1.2011 21:00 | top  | topP7 
5 | 1.1.2010 11:11 | left  | leftP0 

,我需要得到:

Date  | Sum_Macro | 
---------------------- 
1.1.2010 | 2 
2.1.2010 | 1 
3.1.2010 | 1 

其中: 任何DISTINCT日期(剝離時間),我需要一個總和DISTINCT宏發生次數。 在2010年1月1日宏核心和左中運行,因此,2 ...等

我可以在此使用視圖做,但我敢肯定有更簡單的方法:

CREATE VIEW Days_Macros AS 
SELECT DISTINCT MacroID, COUNT(MacroID) AS MacroCnt, CONVERT(varchar, tStamp, 103) AS x 
FROM TRADStatMacro 
GROUP BY MacroID, CONVERT(varchar, tStamp, 103) 

這給我:

MacroID | MacroCnt | x 
------------------------------ 
core  | 2  | 1.1.2010 
main  | 1  | 2.1.2010 
top  | 1  | 3.1.2010 
left  | 1  | 1.1.2011 

比:

SELECT DISTINCT X, COUNT(MacroCnt) AS Y FROM Test 
GROUP BY X 

給我的結果。 ...太複雜了,想法有人嗎?

感謝名單

回答

0

的樣本數據:

if object_id('tempdb..#tab') is not null drop table #tab 

create table #tab (
    id int, 
    date datetime, 
    macroId varchar(6), 
    fynctionId varchar(10) 
) 

insert into #tab 
select 1 , '1.1.2010 10:00', 'core', 'coreP1' union 
select 2 , '2.1.2010 11:11', 'main', 'mainP7' union 
select 3 , '1.1.2010 17:01', 'core', 'coreP2' union 
select 4 , '3.1.2011 21:00', 'top ', 'topP7' union 
select 5 , '1.1.2010 11:11', 'left', 'leftP0' 

查詢(編輯澄清後):

select 
    dateadd(dd, 0, datediff(dd, 0, date)) as Date, 
    count(distinct MacroId) as Sum_Macro 
from #tab 
group by dateadd(dd, 0, datediff(dd, 0, date)) 
+0

嗨米哈爾, 也許我沒能清楚地表達自己。我需要一個具有不同日期的輸出,以及每天不同的macroID的總和。即使同一個MacroID的不同功能每天超過一次,它仍然應該只計算一次: DISTINCT MacroID /天的總和 –

+0

我改變了查詢,現在它給出了精確的結果集,因爲您一直在要求。 –

+0

是的,你做到了:O)謝謝你! –

0

我往往是用於此目的的CTE的風扇(具有基本上內嵌視圖)。它看起來像你使用SQL Server,所以你可以這樣做:

WITH counts AS 
(
    SELECT DISTINCT MacroID, COUNT(MacroID) AS MacroCnt, CONVERT(varchar, tStamp, 103) AS x 
    FROM TRADStatMacro 
    GROUP BY MacroID, CONVERT(varchar, tStamp, 103) 
) 
SELECT DISTINCT X, COUNT(MacroCnt) AS Y FROM counts 
GROUP BY X 

問題:你的意思是第二COUNT()實際上是一個SUM()

但是您的查詢可以簡化。如果您已經按照使記錄唯一的列進行分組,則不需要DISTINCT。而你不使用MacroId場比合計COUNT()功能等,所以你可以消滅它,或許一切都簡化到:

SELECT CONVERT(varchar, tStamp, 103) AS X, COUNT(MacroID) 
FROM TRADStatMacro 
GROUP BY MacroID, CONVERT(varchar, tStamp, 103) 
+1

您不需要在第二個查詢中按MacroID進行分組。 –

+0

Thx迴應。 什麼是查詢中的測試引用? PS:是的,我正在使用SQL 2008 –

+0

@PetrŠimůnek:對不起,這是一個錯字;我糾正了這個例子。 –