2017-08-09 19 views
0

I次のクエリがあります。SQL名前の変更ロー結果

SELECT * FROM [dbo].[SellThruDaily852] WHERE RetailerID='AMAZON' --order by StartDate 
     AND StartDate in (20170731,20170801,20170802,20170803,20170804,20170805,20170806); 
WITH AMAZON AS 
    (
    SELECT 
     MAX(ProcessRunId) ProccessID, 
     DATEPART(YY,DATEADD(DD,-1,CAST(CreatedDate AS DATE))) VizioYear , 
     DATEPART(WK,DATEADD(DD,-1,CAST(CreatedDate AS DATE))) WeekID, 
     CAST(DATENAME(dw,CAST(CreatedDate AS DATE)) AS VARCHAR) DayName, 
     FileName, 
     CAST(CreatedDate AS DATE) CreateDate 
     --CreatedDate 
    FROM [dbo].[FileCheckResult] 
    WHERE 
     RetailerID='AMAZON' 
     AND FileCheckType='Received' 
     AND FileDataType='SellThru' 
     AND FileName like '852_AMAZON_9%' 
    GROUP BY FileName,CAST(CreatedDate AS DATE) 
    ) 
SELECT 
    * 
FROM AMAZON 
WHERE 
    VizioYear=2017 
    AND WeekID=31 
ORDER BY CreateDate 

そして、これが結果です:私がやりたいものを

enter image description here

はにDAYNAMEの最初の2つの行を変更です - 月曜日と火曜日。

答えて

1
--YOUR PREVIOUS CODE-- 
--AFTER CTE 
SELECT 
     ProccessID, 
     VizioYear , 
     WeekID, 
     CASE WHEN rownumber in (1,2) THEN 'Monday and Tuesday' ELSE DayName END AS DayName , 
     FileName, 
     CreateDate 
FROM 
(
SELECT 
    *, ROW_NUMBER()OVER(ORDER BY CreateDate) as rownumber 
FROM AMAZON 
WHERE 
    VizioYear=2017 
    AND WeekID=31 
) as ABC 
ORDER BY ABC.CreateDate 
0

ここでは、1つの日付に対して3つのファイルがあり、もちろん同じDayName(DATENAME(日付))を返します。

理想的な解決策は、強調表示された2つの行について、2017-08-02から2017-07-31 2017-08-01までCreateDateを更新することです。これにより、望ましい結果が得られます。

あなたがデータを変更し、クエリでそれをやりたいことができない場合は、あなたが望む結果を得るために、単一のCASEを追加することができます。

CASE 
WHEN FileName == 'FileMonday.csv' THEN 'Monday' 
WHEN FileName == 'FileTuesday.csv' THEN 'Tuesday' 
ELSE 
CAST(DATENAME(dw,CAST(CreatedDate AS DATE)) AS VARCHAR) 
END AS DayName, 
関連する問題