[英]Creating an HTML table string in SQL from a result with gap values
我使用的郵件模板引擎不能接受除SQL輸出以外的任何內容(由於該輸出已經是子查詢),因此我試圖將HTML表直接輸出為字符串。
我需要創建一個SQL腳本,該腳本通過某種形式的黑魔法從一組顯示中創建一個表,其中以天為列,以顯示時間為表單元格。 例如:
FR SA SU MO TU WE TH FR
16:00 11:10 11:10 16:00 12:50
13:40 13:40 15:10
16:00 16:00
我有一個查詢,該查詢獲取所有必需的數據及其列號和行號,但不知道如何將其轉換為看起來像每一行的字符串值:
<tr><td>16:00</td><td>11:10</td><td>11:10</td><td></td><td>16:00</td><td>12:50</td><td></td><td></td></tr>
這是我現在正在使用的查詢(和示例數據):
declare @Shows table(id int, start datetime);
insert into @Shows(id, start) values (801, '2013-12-13 16:00');
insert into @Shows(id, start) values (325, '2013-12-14 11:10');
insert into @Shows(id, start) values (662, '2013-12-14 13:40');
insert into @Shows(id, start) values (771, '2013-12-14 16:00');
insert into @Shows(id, start) values (772, '2013-12-15 11:10');
insert into @Shows(id, start) values (441, '2013-12-15 13:40');
insert into @Shows(id, start) values (775, '2013-12-15 16:00');
insert into @Shows(id, start) values (138, '2013-12-17 16:00');
insert into @Shows(id, start) values (238, '2013-12-18 12:50');
insert into @Shows(id, start) values (947, '2013-12-18 15:10');
declare @DayWrapHour int=3;
declare @FromDate datetime='2013-12-13 15:00';
declare @ToDate datetime = dateadd(day, 8, CONVERT(date, @FromDate));
set @ToDate = DATEADD(hour, @DayWrapHour, @ToDate); --8 days from now, at 3 am
select *, ROW_NUMBER() over (partition by columnindex order by columnindex) as rownumber
from (
select
s.Id,
CONVERT(char(5), CONVERT(time, s.start)) as StartTime,
DATEDIFF(DAY,
DATEADD(HOUR, @DayWrapHour, CONVERT(datetime, CONVERT(date, @FromDate))), --@FromDate, at 3 am
s.start
) as columnindex
from @Shows s
where s.start between @FromDate and @ToDate
)as sub
order by rownumber, sub.columnindex
我以為那已經很聰明了,但是我很困惑如何在不使用非SQL代碼的情況下對此進行一次foreach,以及如何處理數據空白。
該查詢的輸出:
Id StartTime columnindex rownumber
801 16:00 0 1
325 11:10 1 1
772 11:10 2 1
138 16:00 4 1
238 12:50 5 1
662 13:40 1 2
441 13:40 2 2
947 15:10 5 2
771 16:00 1 3
775 16:00 2 3
請注意,列數是固定的,但行數不是固定的。
您可以使用類似以下的方法來旋轉列:
select
rownumber
, col0 = max(case when columnindex = 0 then StartTime end)
, col1 = max(case when columnindex = 1 then StartTime end)
, col2 = max(case when columnindex = 2 then StartTime end)
from (
-- your previous query with the rownumber and columnindex
) x
group by rownumber
然后for xml
生成html,就像在此答案中一樣: 使用SQL FOR XML創建HTML表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.