这是我的第一篇文章,如果格式不正确,请注意。
我正在为饼图创建数据集,对于每一行,我需要在颜色表中添加颜色(COL_COL)和颜色突出显示(COL_HIG),如下所示。
CREATE TABLE [dbo].[T_COL](
[COL_SEQ] [int] IDENTITY(1,1) NOT NULL,
[COL_COL] [nvarchar](20) NULL,
[COL_HIG] [nvarchar](20) NULL,
[COL_NAM] [nvarchar](50) NULL,
[COL_DEL] [bit] NOT NULL,
)
INSERT INTO [dbo].[T_COL] ([COL_COL]
,[COL_HIG]
,[COL_NAM]
,[COL_DEL])
VALUES
('#F7464A', '#FF5A5E','Red', 0),
('#46BFBD', '#5AD3D1','Green', 0),
('#FDB45C', '#FFC870','Yellow', 0),
('#949FB1', '#A8B3C5','Grey', 0),
('#4D5360', '#616774','Dark Grey', 0)
从审计表生成数据的SQL是......
select count(*) as 'Visits',
datename(mm, AUD_DAT) as 'Month',
'Unique Visits by Month' as 'Title',
datepart(mm, AUD_DAT) as 'MonthNo',
ROW_NUMBER() OVER (ORDER BY datename(mm, AUD_DAT)) AS 'rownum',
null as 'colour',
null as 'ColHightlight'
into #temp
from dbo.T_AUD
where AUD_TYP_SEQ = 3 and datepart(year, AUD_DAT) = @year
group by datename(mm, AUD_DAT),datepart(mm, AUD_DAT)
order by datepart(mm, AUD_DAT)
上面的查询返回8行,颜色表中有五种颜色。我试图达到行1-5包含颜色1-5的点,然后第6行将包含颜色1,7包含颜色2,依此类推。我不想硬编码颜色的数量,而是想使用颜色表的计数,因为当颜色添加到该表时,计数将会改变。
我尝试使用row_number函数,但是只增加每行的数字,我不确定当它到达颜色表的计数时是否可以将其重置为1。
你可以帮助我帮助我吗?任何帮助赞赏。 尼克。答案 0 :(得分:0)
如果我理解正确,你可以使用模运算做你想做的事。我不清楚你引用的表与你的问题有什么关系(“颜色”表应该是t_col
?我不知道。)
以下查询提供了解决此问题的方法:
with yourquery as (
<your query>
)
select y.*, c.*
from yourquery y join
(select c.*, row_number() over (order by id) as seqnum,
count(*) over () as numcolors
from colors
) c
on y.rownum % c.numcolors = c.seqnum - 1;
注意:您应该只对字符串和日期常量使用单引号。不要对列别名使用单引号。
答案 1 :(得分:0)
做这样的事情。 ctecolors
会标记rn(0, 1, 2, 3, 4)
行。
teaud
会标记rn(0, 1, 2, 3, 4, 0, 1....)
。然后在rn
上进行简单的加入。
;with ctecolors as
(select *, -1+row_number() over(order by (select 1)) rn from [dbo].[T_COL]),
cteaud as
( select count(*) as 'Visits',
datename(mm, AUD_DAT) as 'Month',
'Unique Visits by Month' as 'Title',
datepart(mm, AUD_DAT) as 'MonthNo',
(-1+ROW_NUMBER() OVER (ORDER BY datename(mm, AUD_DAT))) % 5 AS rn
from dbo.T_AUD
where AUD_TYP_SEQ = 3 and datepart(year, AUD_DAT) = @year
group by datename(mm, AUD_DAT),datepart(mm, AUD_DAT))
Select Visits,Month,Title,MonthNo, ctecolors.* into #temp
from ctecolors cc
join cteaud ca on cc.rn = ca.rn