2016-06-07 21 views
1

我需要使用TSQL在SSMS 2012上編寫查詢,以計算每個度量的charge_log_date的不同計數。此charge_log_date字段是一個smalldatetime(小時存儲爲「00:00:00」),因此只有日計數很重要。對5個度量執行不同的計數

此數據集將用於填充總計5個切片器的PowerPivot表,每個度量一個。這些措施標題:

payor_family, company_name, base_type, base_state, payor_code 

當用戶點擊這些切片器,這charge_log_day_count需要數天的不同#/測量點擊。因此,如果他們只點擊一個payor_family而沒有其他分片,那麼該數據集只需要包含該payor_family的計數。這是一個簡單的例子。但是,如果他們點擊多個切片器,則數據集需要包括選定的每個切片器度量的計數。

我到目前爲止所做的是創建一個查找表,其中存儲每5個度量的計數,每行一個度量值,其中NULLS表示其他值。

ASK:
我怎樣才能將這個表的主要數據集只包含相關的罪名?這裏是一個帶數據的示例表格:

create table #charge_log_dates 
(
payor_family varchar(5), 
company_name varchar(5), 
base_type varchar(5), 
base_state varchar(5), 
payor_code varchar(5), 
ct int 
) 

insert #charge_log_dates values('PF1',NULL,NULL,NULL,NULL,5) 
insert #charge_log_dates values('PF2',NULL,NULL,NULL,NULL,10) 
insert #charge_log_dates values('PF3',NULL,NULL,NULL,NULL,25) 
insert #charge_log_dates values(NULL,'CN1',NULL,NULL,NULL,3) 
insert #charge_log_dates values(NULL,'CN2',NULL,NULL,NULL,8) 
insert #charge_log_dates values(NULL,'CN3',NULL,NULL,NULL,18) 
insert #charge_log_dates values(NULL,NULL,'BT1',NULL,NULL,5) 
insert #charge_log_dates values(NULL,NULL,'BT2',NULL,NULL,1) 
insert #charge_log_dates values(NULL,NULL,'BT3',NULL,NULL,6) 
insert #charge_log_dates values(NULL,NULL,NULL,'BS1',NULL,9) 
insert #charge_log_dates values(NULL,NULL,NULL,'BS2',NULL,10) 
insert #charge_log_dates values(NULL,NULL,NULL,'BS3',NULL,30) 
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC1',15) 
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC2',15) 
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC3',45) 

SELECT * from #charge_log_dates 

drop table #charge_log_dates 

這是我的主表。請注意,只需選擇一個切片器或非常複雜,這可能非常簡單。 (我注意到以前我有一些重複值的行,實際上這個表是由payor_family,company_name,base_type,base_state和payor_code分組的,所以不應該有重複)。

create table #main (
payor_family varchar(5), 
company_name varchar(5), 
base_type varchar(5), 
base_state varchar(5), 
payor_code varchar(5), 
measure1 int, 
measure2 int, 
measure3 int 
) 

insert #main values('PF1',NULL,NULL,NULL,NULL,45,14,18) 
insert #main values('PF2',NULL,NULL,NULL,NULL,52,34,13) 
insert #main values('PF3',NULL,NULL,NULL,NULL,10,14,12) 
select * from #main 
truncate table #main 

insert #main values(NULL,'CN1',NULL,NULL,NULL,9,9,18) 
insert #main values(NULL,'CN2',NULL,NULL,NULL,13,9,18) 
select * from #main 
truncate table #main 

insert #main values('PF1','CN2','BT3','BS3','PC1',41,14,18) 
insert #main values('PF2','CN1','BT1','BS3','PC1',42,15,18) 
insert #main values('PF3','CN1','BT3','BS3','PC1',43,16,18) 
select * from #main 
drop table #main 

這就是我需要的輸出。從最高級到最精細的層次結構是payor_family,company_name,base_type,base_state和payor_code。這意味着如果只選擇payor_family,這將僅顯示來自包含匹配payor_family的行的計數。但由於payor_code是最精細的,所以無論他們爲其他切片器選擇什麼,計數應該來自包含匹配payor_code的行。

payor_family company_name base_type base_state payor_code measure1 measure2 measure3 ct 
PF1 NULL NULL NULL NULL 45 14 18 5 
PF2 NULL NULL NULL NULL 52 34 13 10 
PF3 NULL NULL NULL NULL 10 14 14 25 
NULL CN1 NULL NULL NULL 9 9 18 3 
NULL CN2 NULL NULL NULL 13 9 18 8 
PF1 CN2 BT3 BS3 PC1 41 14 18 15 
PF2 CN2 BT1 BS3 PC1 42 15 18 15 
PF3 CN2 BT3 BS3 PC1 43 16 18 15 
+0

您給了我們查找表定義,但不是主查詢。 – sagi

+0

你的意思是說你有5個衡量標準,但實際上只有一個衡量標準做了不同的計數,然後是包含5個成員的一個維度:payor_family,company_name,base_type,base_state,payor_code。那是對的嗎? –

+0

對不起,我剛纔看到你的評論。我更新了我的問題。 – salvationishere

回答

0

我在PowerPivot中修改了這個問題。謝謝您的幫助。

相關問題