22,209
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('P_Query201404')IS NOT NULL
DROP PROCEDURE P_Query201404
GO
CREATE PROCEDURE P_Query201404
@Year VARCHAR(4)
AS
BEGIN
DECLARE @StartDate VARCHAR(6),@EndDate VARCHAR(6)
SET @StartDate=@Year+'01'
SET @EndDate=@Year+'12'
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+'''THEN price END)['+YSMonth+']'
FROM(
SELECT CONVERT(VARCHAR(6),DATEADD(MONTH,number,RTRIM(@StartDate)+'01'),112)YSMonth
FROM master..spt_values
WHERE type='P' AND number<=DATEDIFF(MONTH,RTRIM(@StartDate)+'01',RTRIM(@EndDate)+'01')
)T
SET @SQL=@SQL+',SUM([Price])[合计]'
SET @SQL=@SQL+'FROM[totalprice]
Where SCode is not null AND YSMonth BETWEEN'''+@StartDate+'''AND '''+@EndDate+'''
GROUP BY SCode,SName'
EXEC(@SQL)
END
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+''' THEN Price END)['+YSMonth+']'
FROM totalprice GROUP BY YSMonth
SET @SQL=@SQL+'FROM totalprice GROUP BY SCode,SName'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT SCode,SName
,SUM(CASE WHEN YSMonth='201401' THEN Price END)[201401]
,SUM(CASE WHEN YSMonth='201402' THEN Price END)[201402]
,SUM(CASE WHEN YSMonth='201403' THEN Price END)[201403]
FROM totalprice
GROUP BY SCode,SName
CREATE PROCEDURE P_Query201404
@StartDate char(20),
@EndDate char(20)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+'''THEN price END)['+YSMonth+']'
FROM(
SELECT CONVERT(VARCHAR(6),DATEADD(MONTH,number,RTRIM(@StartDate)+'01'),112)YSMonth
FROM master..spt_values
WHERE type='P' AND number<=DATEDIFF(MONTH,RTRIM(@StartDate)+'01',RTRIM(@EndDate)+'01')
)T
SET @SQL=@SQL+',SUM([Price])[合计]'
SET @SQL=@SQL+'FROM[totalprice]
Where SCode is not null AND YSMonth BETWEEN'''+@StartDate+'''AND '''+@EndDate+'''
GROUP BY SCode,SName'
EXEC(@SQL)
END
已处理CREATE PROCEDURE P_Query201404
@StartDate char(20),
@EndDate char(20)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+'''THEN price END)['+YSMonth+']'
FROM(
SELECT CONVERT(VARCHAR(6),@StartDate+number)YSMonth
FROM master..spt_values
WHERE type='P' AND number<=(@EndDate+0)-@StartDate
)T
SET @SQL=@SQL+',SUM([Price])[合计]'
SET @SQL=@SQL+'FROM[totalprice]
Where SCode is not null AND YSMonth BETWEEN'''+@StartDate+'''AND '''+@EndDate+'''
GROUP BY SCode,SName'
EXEC(@SQL)
END
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+CAST(YSMonth AS VARCHAR)+''' THEN Price END)['+CAST(YSMonth AS VARCHAR)+']'
FROM totalprice GROUP BY YSMonth
SET @SQL=@SQL+',SUM(Price)[合计]'
SET @SQL=@SQL+'FROM totalprice GROUP BY SCode,SName'
PRINT @SQL
EXEC(@SQL)
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+CAST(YSMonth AS VARCHAR)+''' THEN Price END)['+YSMonth+']'
FROM totalprice GROUP BY YSMonth
SET @SQL=@SQL+',SUM(Price)[合计]'
SET @SQL=@SQL+'FROM totalprice GROUP BY SCode,SName'
PRINT @SQL
EXEC(@SQL)
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+''' THEN Price END)['+YSMonth+']'
FROM totalprice GROUP BY YSMonth
SET @SQL=@SQL+',SUM(Price)[合计]'
SET @SQL=@SQL+'FROM totalprice GROUP BY SCode,SName'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT SCode,SName
,SUM(CASE WHEN YSMonth='201401' THEN Price END)[201401]
,SUM(CASE WHEN YSMonth='201402' THEN Price END)[201402]
,SUM(CASE WHEN YSMonth='201403' THEN Price END)[201403]
,SUM(Price)[合计]
FROM totalprice
GROUP BY SCode,SName