1

我需要使用 TSQL 在 SSMS 2012 上编写一个查询,计算每个度量的charge_log_date 的不同计数。这个charge_log_date 字段是一个小日期时间(小时存储为“00:00:00”),所以只有天数很重要。

此数据集将用于填充 PowerPivot 表,其中总共有 5 个切片器,每个度量一个。这些措施的标题是:

payor_family, company_name, base_type, base_state, payor_code

当用户单击这些切片器中的任何一个时,此 charge_log_day_count 需要计算所单击的不同天数/度量值。因此,如果他们只单击一个 payor_family 而没有其他切片器,则数据集只需包含该 payor_family 的计数。这是简单的情况。但是,如果他们单击多个切片器,则数据集需要包含每个所选切片器度量的计数。

到目前为止,我所做的是创建一个查找表来存储这 5 个度量中每一个度量的计数,每行一个度量值,其中 NULLS 表示其他值。

问:
如何将此表加入主数据集以仅包含相关计数?这是一个包含数据的示例表:

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
4

1 回答 1

0

我通过在 PowerPivot 中执行此操作来解决此问题。谢谢您的帮助。

于 2016-06-09T13:09:43.290 回答