繁体   English   中英

提取2年的数据并将数字转换为月

[英]Extract Data for 2 years and convert number to month

我有下表,其中月和年分开,我想加入以创建日期(因为我没有日,可以将其设置为第一个)

Measurement mm  yyyy
15000   1   2014
16000   2   2014
15000   5   2013
16000   3   2014
15000   4   2014
16000   5   2014
15000   6   2013
16000   7   2012

所以我想输出为:

15000 01/01/2014
16000 01/02/2014

等等

仅最近两年。

这可能吗?

谢谢

SELECT Measurement,DT FROM
(
    SELECT Measurement,DENSE_RANK() OVER(ORDER BY YYYY DESC) RNK,
    CONVERT(varchar(11),'01'+'/'+CAST(MM AS VARCHAR(2))+'/'+CAST(YYYY AS VARCHAR(4)),103) DT
    FROM #TEMP
)TAB
WHERE RNK IN(1,2)

更新

我正在根据您的新要求进行更新

在这里,我们将获得所有月份和与您一起LEFT JOIN表格

;WITH CTE1 AS
(
    SELECT 1 ID, CAST('01/01/2013' AS DATE) DT
    UNION ALL 
    SELECT ID+1,DATEADD(MONTH,1,DT) FROM CTE1
    WHERE ID<12
)
SELECT ID,DATENAME(MONTH,DT) [MONTH],TP.*,
DENSE_RANK() OVER(ORDER BY YYYY DESC) RNK
INTO #NEWTABLE
FROM CTE1
LEFT JOIN TEMP TP ON CAST(TP.MM AS NUMERIC(3,0)) = CAST(CTE1.ID AS NUMERIC(3,0)) 

现在我们声明2个变量,第一个变量获取值以将月份的行显示为列,第二个变量将NULL with zero替换NULL with zero

DECLARE @cols NVARCHAR (MAX)
DECLARE @NullToZeroCols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + [MONTH] + ']', 
              '[' + [MONTH] + ']')
               FROM    (SELECT DISTINCT ID,[MONTH] FROM #NEWTABLE) PV  
               ORDER BY ID

SET @NullToZeroCols = SUBSTRING((SELECT ',ISNULL(['+[MONTH]+'],0) AS ['+[MONTH]+']' 
FROM(SELECT DISTINCT [MONTH],ID FROM #NEWTABLE GROUP BY [MONTH],ID)TAB  
ORDER BY ID  FOR XML PATH('')),2,8000)

现在,我们选择表格中的最近两年并对其进行调整

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT yyyy,' + @NullToZeroCols + ' FROM 
             (
                 SELECT yyyy, [MONTH], Measurement FROM #NEWTABLE
                 WHERE RNK IN(1,2)
             ) x
             PIVOT 
             (
                 SUM(Measurement)
                 FOR [MONTH] IN (' + @cols + ')
              ) p
              WHERE yyyy IS NOT NULL
              ORDER BY yyyy;' 

EXEC SP_EXECUTESQL @query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM