sql - 想要在用户输入的日期范围 @Cols 上创建 sql Pivot。如何在程序中声明@fromDate、@toDate?日期是项目表上的一个字段
问题描述
select *
From
(
Select
st.site_code
si.item_code
from c_item i
inner join c.item_code ic on i.item_key=ic.item_key
)PVT
Pivot
(Count(si.item_code)for [DATE] in [' + @Cols + ']P
解决方案
我认为您需要使用日期表从用户输入中获取所有@fromDate
黑白日期。@toDate
您可以使用现有的时间表或制作一个时间表并使用表中的日期值来创建从日期到日期的所需列。
下面附上示例代码。
create or alter procedure pivot_table_with_user_input
(
@from_Date varchar(10),
@to_Date varchar(10)
)
as
begin
DROP TABLE IF EXISTS [CalendarTable]
CREATE TABLE [CalendarTable]
(
[CalendarDate] varchar(10)
)
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = (select dateadd(yy, -10, convert(varchar(10), GETDATE(), 121))) --10 years back from the current date
SET @EndDate = DATEADD(yy, 10, @StartDate) --10 years in the future from the current date
WHILE @StartDate <= @EndDate
BEGIN
INSERT INTO [CalendarTable]
SELECT convert(varchar(10), convert(date, @StartDate), 121)
SET @StartDate = DATEADD(dd, 1, @StartDate)
END
declare @cols nvarchar(max) = ''
set @cols = STUFF(
( select ',' + quotename(convert(varchar(10), t.CalendarDate))
from CalendarTable t
where t.CalendarDate between convert(date, @from_Date) and convert(date, @to_Date)
FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, ''
);
select @cols column_value --check the dynamic columns
declare @sql nvarchar(max) = '
select site_code, '+@cols+'
From
(
Select site_code,item_code, date_field
from c_item
)PVT
Pivot
(
Count(item_code)for date_field in ('+@cols+')
)P
'
print @sql
exec sp_executesql @sql
end
db<>小提琴链接。
推荐阅读
- google-apps-script - getFiles() 没有返回所有可用的文件
- c - 从数组中填充缺失的数字
- jasper-reports - 默认情况下如何将报告的输入参数更改为“DD-MM-YY”将输入作为“d/M/y”我必须传递 inout 参数以进行选择查询
- google-cloud-platform - 我想检查上传谷歌云存储需要多长时间
- google-maps - Ionic 3. 当我尝试移动标记时,Google maps api 返回:'setposition undefined'
- python - MongoEngine:EmbeddedDocumentListField() 和 ListField(EmbeddedDocumentField()) 之间的区别?
- square - Square iOS Web API 返回 amount_invalid_format 错误,任何金额包含 0.99
- ruby - Ruby 中的 Æ、Ø 和 Å - 为什么 ("A".."Å").to_a 返回双字母?
- c# - 显示默认设备输出的音量峰值
- amazon-web-services - 使用 npm 安装 aws-sam-local 后找不到 sam 二进制文件