【发布时间】:2019-09-29 09:29:22
【问题描述】:
我想根据我的报表用户的输入参数创建一个动态表。选择ProfitCenterID 时,我希望此ProfitCenterID 显示为1 级,所有子ProfitCenterID 显示为2 级到xx 级。
当参数 /ProfitCenterID 设置为“业务单位 A”时,我需要一个包含此层次结构中所有 ProfitcenterID 的表。我在下面有一个示例,显示了所需的结果。
我的ProfitCenterID 的结构如下面的示例数据所示。我的实际生产数据有 19 个级别,用户可以从列ProfitCenterID 中选择一个输入值参数。
我的报告工具是 Tableau,我使用带有参数的自定义 SQL 查询连接到我的 MS SQL 服务器数据库。
时间:
ProfitcenterID_Level 为 4(与“业务单元 A”一样)WHERE 子句必须使用列 ProfitCenterID_Level_04
ProfitcenterID_Level 是 5(因为它是“帐户 1”),WHERE 子句必须使用列 ProfitCenterID_Level_05
ProfitcenterID_Level 是 6(因为它是“D-123400”),WHERE 子句必须使用列 ProfitCenterID_Level_06
我不知道如何根据ProfitcenterID 中的值创建此查找,它为我提供ProfitcenterID_Level。
下面的示例数据和期望的结果示例。
样本数据:
CREATE TABLE [Sample]
(
ProfitCenterID nchar(30)
,ProfitCenterID_Level smallint
,ProfitCenterID_Level_01 nchar(30)
,ProfitCenterID_Level_02 nchar(30)
,ProfitCenterID_Level_03 nchar(30)
,ProfitCenterID_Level_04 nchar(30)
,ProfitCenterID_Level_05 nchar(30)
,ProfitCenterID_Level_06 nchar(30)
,ProfitCenterID_Level_07 nchar(30)
)
INSERT INTO [Sample]
VALUES ('Business Unit A','4','Global Enterprise','Europe','Denmark','Business Unit A','','',''),
('Account 1','5','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','',''),
('D-123400','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123400',''),
('D-123410','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123410'),
('D-123420','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123420'),
('D-123430','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123430'),
('D-123440','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123440'),
('D-123450','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123450',''),
('D-123460','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460',''),
('D-123465','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123465'),
('D-123470','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123470'),
('D-123480','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123480'),
('D-123483','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123483',''),
('D-123485','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123485'),
('D-123486','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123486'),
('D-123487','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123487',''),
('D-123488','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123488'),
('D-123489','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123489'),
('D-123490','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490',''),
('D-123491','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123491'),
('D-123492','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123492'),
('D-123493','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123493'),
('D-123494','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123494'),
('D-123495','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123495'),
('D-123496','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123496'),
('D-123497','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123497'),
('D-123498','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123498'),
('D-123499','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123499')
所需结果(在选择“业务单位时” - 级别4 ):
SELECT [ProfitCenterID]
,[ProfitCenterID_Level]
-- ,[ProfitCenterID_Level_01]
-- ,[ProfitCenterID_Level_02]
-- ,[ProfitCenterID_Level_03]
,[ProfitCenterID_Level_04] AS 'Level 01'
,[ProfitCenterID_Level_05] AS 'Level 02'
,[ProfitCenterID_Level_06] AS 'Level 03'
,[ProfitCenterID_Level_07] AS 'Level 04'
FROM [MyDatabase].[dbo].[Sample]
WHERE ProfitCenterID_Level_04 = 'Business Unit A'
/****** 'Business Unit A' is the input parameter from my report user ******/
所需结果(在选择“帐户1”时 - 级别5 ):
SELECT [ProfitCenterID]
,[ProfitCenterID_Level]
-- ,[ProfitCenterID_Level_01]
-- ,[ProfitCenterID_Level_02]
-- ,[ProfitCenterID_Level_03]
-- ,[ProfitCenterID_Level_04]
,[ProfitCenterID_Level_05] AS 'Level 01'
,[ProfitCenterID_Level_06] AS 'Level 02'
,[ProfitCenterID_Level_07] AS 'Level 03'
FROM [MyDatabase].[dbo].[Sample]
WHERE ProfitCenterID_Level_05 = 'Account 1'
/****** 'Account 1' is the input parameter from my report user ******/
【问题讨论】:
-
你能发布一些示例数据吗?
-
请不要张贴图片来显示您的样本和预期结果;他们无法帮助您寻求帮助的用户,因为我们无法利用他们。花点时间发布 DDL 和 DML 语句,并格式化
text以获得您的预期结果。不要忘记包括您的尝试。 -
大家好。感谢您的投入。我在下面的答案中包含了我的示例数据。
-
好的,所以您的要求是获得一个动态表,其中当您选择业务单位时,应显示业务单位列,否则如果您选择帐户,则应跳过业务单位列和行,仅应显示帐户显示对了吗?
-
在图像中你也显示到 4 级和 3 级,所以不需要其他级别?