gpt4 book ai didi

sql - 事件表和日期范围之间的 t-sql 查询

转载 作者:行者123 更新时间:2023-12-04 19:26:06 26 4
gpt4 key购买 nike

根据下表

id  Title   Date            Metadata  
------------------------------------
1 A 08/01/2010 M1
1 A 10/05/2010 M2
1 A 03/15/2011 M3
2 B 09/20/2010 M1
2 B 01/15/2011 M2
3 C 12/15/2010 M1

输入变量将是开始日期和结束日期。例如,

@startDate = '07/01/2010' 
@endDate = '06/30/2011'

如何生成下面的输出?

Title  Jul-10  Aug-10 Sep-10 Oct-10 Nov-10  Dec-10 Jan-11 Feb-11 Mar-11 Apr-11 May-11 Jun-11
-------------------------------------------------------------------------------------------
A Null M1 Null M2 Null Null Null Null M3 Null Null Null
B Null M1 Null Null Null Null M2 Null Null Null Null Null
C Null Null Null Null Null M1 Null Null Null Null Null Null

最佳答案

您正在寻找的通常称为交叉表查询。如果您要问的是如何在给定静态列列表的情况下构建交叉表查询,您可以这样做:

Select Title
, Min( Case When DatePart(mm, [Date]) = 7 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Jul-10]
, Min( Case When DatePart(mm, [Date]) = 8 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Aug-10]
, Min( Case When DatePart(mm, [Date]) = 9 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Sep-10]
...
From Table
Where [Date] Between @StartDate And @EndDate
Group By Title

同样,您可以按照 Broken Link 的建议使用 PIVOT 功能。但是,上述解决方案和 PIVOT 功能都依赖于static 列声明。如果您想要的是一个动态的列列表(又名动态交叉表),那么您就超出了 T-SQL 最初设计的范围。 可能有一些错误的动态 SQL,但它很脆弱而且很麻烦。相反,您应该在中间层组件中构建结果集或使用将构建交叉表结果的报告工具。

关于sql - 事件表和日期范围之间的 t-sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com