我需要使用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
您給了我們查找表定義,但不是主查詢。 – sagi
你的意思是說你有5個衡量標準,但實際上只有一個衡量標準做了不同的計數,然後是包含5個成員的一個維度:payor_family,company_name,base_type,base_state,payor_code。那是對的嗎? –
對不起,我剛纔看到你的評論。我更新了我的問題。 – salvationishere