我有一个包含这些数据的表:
FirstDiscovered|LastDiscovered|Application|Computer|Organisation
----------------------------------------------------------------
05.03.2017 |05.08.2017 |App A |Comp 1 |Org 1
----------------------------------------------------------------
04.13.2017 |08.01.2017 |App A |Comp 2 |Org 1
----------------------------------------------------------------
05.01.2017 |08.01.2017 |App B |Comp 2 |Org 1
----------------------------------------------------------------
06.13.2017 |08.02.2017 |App A |Comp 3 |Org 2
----------------------------------------------------------------
07.14.2017 |08.02.2017 |App A |Comp 4 |Org 2
----------------------------------------------------------------
07.14.2017 |08.02.2017 |App B |Comp 3 |Org 2
----------------------------------------------------------------
我想使用基于日期属性“firstDiscovered”和“lastDiscovered”的选择语句动态列进行扩展。假设有一行 firstDiscovered = 05.27.17 和 lastDiscovered = 06.25.17。然后我期待两个新的列 May'17 和 June'17 填充“1”。其他行生成的所有其他列(月)设置为“0”或为空,请参见示例:
FirstDiscovered|LastDiscovered|Application|Computer|Organisation|Apr 17|May 17|Jun 17|Jul 17|Aug 17
---------------------------------------------------------------------------------------------------
05.03.2017 |05.08.2017 |App A |Comp 1 |Org 1 |0 |1 |0 |0 |0
---------------------------------------------------------------------------------------------------
04.13.2017 |08.01.2017 |App A |Comp 2 |Org 1 |1 |1 |1 |1 |1
---------------------------------------------------------------------------------------------------
05.01.2017 |08.02.2017 |App B |Comp 2 |Org 1 |0 |1 |1 |1 |1
---------------------------------------------------------------------------------------------------
06.13.2017 |08.02.2017 |App A |Comp 3 |Org 2 |0 |0 |1 |1 |1
---------------------------------------------------------------------------------------------------
07.14.2017 |08.02.2017 |App A |Comp 4 |Org 2 |0 |0 |0 |1 |1
---------------------------------------------------------------------------------------------------
07.18.2017 |08.02.2017 |App B |Comp 3 |Org 2 |0 |0 |0 |1 |1
---------------------------------------------------------------------------------------------------
如果有人会帮助我,那就太好了。
您可以查询如下:
select * from #DiscoverData d
cross apply
( Select top (datediff(mm,d.firstdiscovered, d.lastdiscovered) +1)
RowN = Right(Convert(varchar(10), Dateadd(mm, Row_Number() over(order by (Select NULL))-1 , d.FirstDiscovered),6),6)
from master..spt_values s1, master..spt_values s2 ) c
pivot (Count(RowN) for RowN in ([Apr 17],[May 17],[Jun 17],[Jul 17], [Aug 17])) p
对于月份的动态列表,您可以使用如下查询:
Declare @cols1 varchar(max)
Declare @query nvarchar(max)
Select @cols1 = stuff((
Select ','+QuoteName(RowN) from ( Select min(firstdiscovered) as firstdiscovered, max(lastdiscovered) as lastdiscovered from #DiscoverData ) d
cross apply
( Select top (datediff(mm,d.firstdiscovered, d.lastdiscovered) +1)
RowN = Right(Convert(varchar(10), Dateadd(mm, Row_Number() over(order by (Select NULL))-1 , d.FirstDiscovered),6),6)
from master..spt_values s1, master..spt_values s2 ) c
for xml path('')),1,1,'')
Set @query = ' Select * from #DiscoverData d
cross apply
( Select top (datediff(mm,d.firstdiscovered, d.lastdiscovered) +1)
RowN = Right(Convert(varchar(10), Dateadd(mm, Row_Number() over(order by (Select NULL))-1 , d.FirstDiscovered),6),6)
from master..spt_values s1, master..spt_values s2 ) c
pivot (Count(RowN) for RowN in (' + @cols1 + ')) p '
Exec sp_executesql @query
输出如下:
+-----------------+----------------+-------------+----------+--------------+--------+--------+--------+--------+--------+
| FirstDiscovered | lastdiscovered | Application | computer | Organisation | Apr 17 | May 17 | Jun 17 | Jul 17 | Aug 17 |
+-----------------+----------------+-------------+----------+--------------+--------+--------+--------+--------+--------+
| 2017-04-13 | 2017-08-01 | App A | Comp 2 | Org 1 | 1 | 1 | 1 | 1 | 1 |
| 2017-05-01 | 2017-08-01 | App B | Comp 2 | Org 1 | 0 | 1 | 1 | 1 | 1 |
| 2017-05-03 | 2017-05-08 | App A | Comp 1 | Org 1 | 0 | 1 | 0 | 0 | 0 |
| 2017-06-13 | 2017-08-02 | App A | Comp 3 | Org 2 | 0 | 0 | 1 | 1 | 1 |
| 2017-07-14 | 2017-08-02 | App A | Comp 4 | Org 2 | 0 | 0 | 0 | 1 | 1 |
| 2017-07-14 | 2017-08-02 | App B | Comp 3 | Org 2 | 0 | 0 | 0 | 1 | 1 |
+-----------------+----------------+-------------+----------+--------------+--------+--------+--------+--------+--------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句