我有一个不同的类别代码,我需要每个月加入,形成一个结束数据的开始日期。
DECLARE @Start DATE, @End DATE
SET @Start = '20170101'
SET @End = getdate()
SELECT Category_Cd, CalMonth = (SELECT DATEADD(MONTH,number+1,@Start) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(MONTH,number+1,@Start) < @End)
FROM dbo.Category
WHERE (Category_Cd LIKE N'0%')
因为没有加入我得到这个: 子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。
我不想加入,我只希望每个类别代码都包含从开始到结束的每个数据。谢谢你的帮助。
DECLARE @Start DATE, @End DATE
SET @Start = '20170101'
SET @End = getdate()
SELECT DATEADD(MONTH,number+1,@Start) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(MONTH,number+1,@Start) < @End
这段代码确实会像我想要的那样返回每个开始日期。现在我只需要完成每个类别代码。
01001 2017-02-01
01001 2017-03-01
01001 2017-04-01
01001 2017-05-01
01002 2017-02-01
01002 2017-03-01
01002 2017-04-01
01002 2017-05-01
01003 2017-02-01
01003 2017-03-01
01003 2017-04-01
01003 2017-05-01
答案 0 :(得分:1)
<强> SQL DEMO 强>
DECLARE @Start DATE, @End DATE;
SET @Start = '20170101';
SET @End = getdate();
WITH myMonths as (
SELECT DATEADD(MONTH,number+1,@Start) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(MONTH,number+1,@Start) < @End
)
SELECT *
FROM category
CROSS JOIN myMonths