需要在SSRS中创建一个列表中编号范围为0-30的列表,并允许以短划线输入空值。即如果我有8个得分为10分的玩家,那么列表会在行值10旁边的行值中显示8,但对于其他29个数字,它会显示短划线( - )?
答案 0 :(得分:2)
您可能需要进行一些调整,但这应该可以帮助您完成大部分工作。没有太多信息可以确切地确定您想要的信息。
将SSRS中的数据集查询调整为以下内容,将子查询Z替换为提供点数和玩家数量的当前查询。我现在在那里插入了虚拟数据所以我会得到这个例子的数据(8 = 1,13 = 1,17 = 2)。
With X as
(
select top (30) n = ROW_NUMBER() OVER (ORDER BY m1.number)
from master.dbo.spt_values as m1
CROSS JOIN master.dbo.spt_values as m2
)
,Y as
(
Select Points, PlayerCount, ROW_NUMBER() OVER (Order by PlayerCount) RowNum
from (
--replace this with your query to return the data
--with your 2 columns for points and player count
Select 8 as Points, 1 as PlayerCount
UNION
Select 17 as Points, 2 as PlayerCount
UNION
Select 13 as Points, 1 as PlayerCount) Z
)
Select x.n as Points, /*isnull(Y.Points,0),*/ Isnull(Y.PlayerCount,0) PlayerCount
from X
left join Y on X.n = Y.Points;
标记为X的CTE是产生30个斑点的原因。如果您希望它是31个点(0 - 30,包括0和30),请将X中的查询更改为
select top (31) n = ROW_NUMBER() OVER (ORDER BY m1.number)-1
from master.dbo.spt_values as m1
CROSS JOIN master.dbo.spt_values as m2
您最终获得了包含2列的数据集:Points和PlayerCount。 现在在SSRS中创建列表。
这会给你一个如下所示的列表:
如果出于某种原因,您只想查看包含>的数字0位玩家在顶部拥有该数量的积分,然后是其余的积分,您可以使用计算列进行此操作。
=iif(Fields!PlayerCount.Value = 0, 2, 1)
的表达式。单击确定。 这使得列表排序如下: