SQL 2012 html表,具有非重复列值的xml路径
使用此表:SQL 2012 html表,具有非重复列值的xml路径,sql,sql-server,sql-server-2012,for-xml-path,for-xml,Sql,Sql Server,Sql Server 2012,For Xml Path,For Xml,使用此表: declare @table table ( ID int not null IDENTITY(1,1), day date, hour int, val int ) insert into @table values ('2016-06-15', 8, 1), ('2016-06-15', 9, 1), ('2016-06-15', 10, 7), ('2016-06-16', 8, 3), ('2016-06-15', 9, 3),
declare @table table
(
ID int not null IDENTITY(1,1),
day date,
hour int,
val int
)
insert into @table
values
('2016-06-15', 8, 1),
('2016-06-15', 9, 1),
('2016-06-15', 10, 7),
('2016-06-16', 8, 3),
('2016-06-15', 9, 3),
('2016-06-15', 10, 5)
这是某个查询的结果,该查询列出了每天和每小时的值。我正在使用我在某处找到的代码(我使用它,但我并不真正理解它)从@table生成html表
SELECT CAST((select 2 [@cellpadding]
,2 [@cellspacing]
,1 [@border]
, 'background-color: rgb(226, 140, 5)' [@style]
,(select th
from (select 'Day' th union all
select 'Hour' th
union all
select 'Val'
) d
for xml path(''),type) tr
,(select (select 'width:260px;vertical-align:top;background-color: white;' [@style], [Day] for xml path('td'),type),
(select 'width:260px;vertical-align:top;background-color: white;' [@style], [Hour] for xml path('td'),type),
(select 'width:260px;vertical-align:top;background-color: white;' [@style], val for xml path('td'),type)
from (
select t.day
, t.Hour
, t.val
FROM @table t
) data
for xml path ('tr'),type)
for xml path('table'), type) AS nvarchar(MAX))
这给了我一个如下的html表:
Day Hour Val
2016-06-15 8 1
2016-06-15 9 1
2016-06-15 10 7
2016-06-16 8 3
2016-06-16 9 3
2016-06-16 10 5
Day Hour Val
2016-06-15 8 1
9 1
10 7
2016-06-16 8 3
9 3
10 5
我想要的是这样一张桌子:
Day Hour Val
2016-06-15 8 1
2016-06-15 9 1
2016-06-15 10 7
2016-06-16 8 3
2016-06-16 9 3
2016-06-16 10 5
Day Hour Val
2016-06-15 8 1
9 1
10 7
2016-06-16 8 3
9 3
10 5
i、 e.不要在天内重复相同的值,只在新的一天显示天值 使用Row_Number()函数显示预期结果。试着这样,
DECLARE @table TABLE (
ID INT NOT NULL IDENTITY(1, 1)
,day DATE
,hour INT
,val INT
)
INSERT INTO @table
VALUES (
'2016-06-15'
,8
,1
)
,(
'2016-06-15'
,9
,1
)
,(
'2016-06-15'
,10
,7
)
,(
'2016-06-16'
,8
,3
)
,(
'2016-06-16'
,9
,3
)
,(
'2016-06-16'
,10
,5
)
SELECT CAST((
SELECT 2 [@cellpadding]
,2 [@cellspacing]
,1 [@border]
,'background-color: rgb(226, 140, 5)' [@style]
,(
SELECT th
FROM (
SELECT 'Day' th
UNION ALL
SELECT 'Hour' th
UNION ALL
SELECT 'Val'
) d
FOR XML path('')
,type
) tr
,(
SELECT (
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,[Day]
FOR XML path('td')
,type
)
,(
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,[Hour]
FOR XML path('td')
,type
)
,(
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,val
FOR XML path('td')
,type
)
FROM (
SELECT CASE
WHEN row_number() OVER (
PARTITION BY day ORDER BY day
) = 1
THEN t.day
ELSE NULL
END AS day
,t.Hour
,t.val
FROM @table t
) data
FOR XML path('tr')
,type
)
FOR XML path('table')
,type
) AS NVARCHAR(MAX))
使用Row_Number()函数显示预期结果。试着这样,
DECLARE @table TABLE (
ID INT NOT NULL IDENTITY(1, 1)
,day DATE
,hour INT
,val INT
)
INSERT INTO @table
VALUES (
'2016-06-15'
,8
,1
)
,(
'2016-06-15'
,9
,1
)
,(
'2016-06-15'
,10
,7
)
,(
'2016-06-16'
,8
,3
)
,(
'2016-06-16'
,9
,3
)
,(
'2016-06-16'
,10
,5
)
SELECT CAST((
SELECT 2 [@cellpadding]
,2 [@cellspacing]
,1 [@border]
,'background-color: rgb(226, 140, 5)' [@style]
,(
SELECT th
FROM (
SELECT 'Day' th
UNION ALL
SELECT 'Hour' th
UNION ALL
SELECT 'Val'
) d
FOR XML path('')
,type
) tr
,(
SELECT (
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,[Day]
FOR XML path('td')
,type
)
,(
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,[Hour]
FOR XML path('td')
,type
)
,(
SELECT 'width:260px;vertical-align:top;background-color: white;' [@style]
,val
FOR XML path('td')
,type
)
FROM (
SELECT CASE
WHEN row_number() OVER (
PARTITION BY day ORDER BY day
) = 1
THEN t.day
ELSE NULL
END AS day
,t.Hour
,t.val
FROM @table t
) data
FOR XML path('tr')
,type
)
FOR XML path('table')
,type
) AS NVARCHAR(MAX))
我已经发布了答案,请检查。我已经发布了答案,请检查。谢谢。当日子一样的时候,我可以如何改变css样式?i、 删除显示为空的列的边框?谢谢。当日子一样的时候,我可以如何改变css样式?i、 e.删除显示为空的列的边框?