作者: luckiejacky 時間: 2015-4-10 20:04 標題: SQL 問題
本帖最後由 luckiejacky 於 2015-4-10 20:05 編輯
如果Attention個Category是零
點可以出 0
- select tl.tl, COUNT(*) AS cnt
- from
- (select i.ItemNo,
- case when i.RevTargetFinishDate IS NULL
- then 'Pls enter target finish date'
- when i.ActualFinishDate IS NOT NULL
- then 'Closed'
- when i.ActualFinishDate IS NULL AND i.RevTargetFinishDate < GETDATE()
- then 'Overdue'
- when i.ActualFinishDate IS NULL AND i.RevTargetFinishDate >= GETDATE() AND DATEDIFF(day, GETDATE(), i.RevTargetFinishDate) > 3
- then 'In progress'
- when i.ActualFinishDate IS NULL AND i.RevTargetFinishDate >= GETDATE() AND DATEDIFF(day, GETDATE(), i.RevTargetFinishDate) <= 3
- then 'Attention'
- else
- 'Internal Error'
- end AS tl
- from IssueLog AS i) AS tl
- LEFT JOIN
- IssueLog AS i
- ON i.ItemNo = tl.ItemNo
- group by tl.tl;
作者: snoopy11hk 時間: 2015-4-10 23:22
union all 加多幾項, 之後 再減番 1
作者: luckiejacky 時間: 2015-4-13 14:19
本帖最後由 luckiejacky 於 2015-4-13 14:33 編輯
[del]..........
作者: henrywho 時間: 2015-4-13 16:11
"COUNT(*) AS cnt" -> "COUNT(tl.ItemNo) AS cnt"
"from IssueLog AS i" -> "from IssueLog AS i union all select to_number(null) ItemNo, 'Attention' tl from dual"
[如果 ItemNo 係 char/varchar2/etc., "to_number(null)" 改 "to_char(null)" ]
作者: luckiejacky 時間: 2015-4-13 17:27
本帖最後由 luckiejacky 於 2015-4-13 17:36 編輯
Thanks
仲有一條問題
如果Query中的 _4Months, _3Months 等想改做 03/2015, 02/2015, 01/2015, 12/2014
有咩方法?
THX
- USE RCS;
- select finalall.RespName,finalall._4Months , finalall._3Months, finalall._2Months, finalall._1Month,
- finalall._4Months + finalall._3Months + finalall._2Months + finalall._1Month AS total
- from
- (select final.RespName, final._4Months, final._3Months, final._2Months, final._1Month, final.union_order
- from
- (select r.RespName, count(four.ItemNo) AS _4Months,
- COUNT(three.ItemNo) AS _3Months, count(two.ItemNo) AS _2Months,
- count(one.ItemNo) AS _1Month, 0 AS union_order
- from
- IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 4
- group by i.ItemNo, r.RespName
- ) AS four
- ON i.ItemNo = four.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 3
- group by i.ItemNo, r.RespName
- ) AS three
- ON i.ItemNo = three.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 2
- group by i.ItemNo, r.RespName
- ) AS two
- ON i.ItemNo = two.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 1
- group by i.ItemNo, r.RespName
- ) AS one
- ON i.ItemNo = one.ItemNo
- WHERE i.RespCatID != 1
- group by r.RespName
-
-
- UNION
- select 'Total' AS RespName, sum(gt._4Months) AS _4Months, sum(gt._3Months) AS _3Months, sum(gt._2Months) AS _2Months, sum(gt._1Month) AS _1Month, 1 AS union_order
- from
- (select r.RespName, count(four.ItemNo) AS _4Months,
- COUNT(three.ItemNo) AS _3Months, count(two.ItemNo) AS _2Months,
- count(one.ItemNo) AS _1Month, 0 AS union_order
- from
- IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 4
- group by i.ItemNo, r.RespName
- ) AS four
- ON i.ItemNo = four.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 3
- group by i.ItemNo, r.RespName
- ) AS three
- ON i.ItemNo = three.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 2
- group by i.ItemNo, r.RespName
- ) AS two
- ON i.ItemNo = two.ItemNo
- LEFT JOIN
- (select i.ItemNo
- from IssueLog AS i
- INNER JOIN
- RespCat AS r
- ON i.RespCatID = r.RespCatID
- where DATEDIFF(month, i.RespRaisedDate, GETDATE()) = 1
- group by i.ItemNo, r.RespName
- ) AS one
- ON i.ItemNo = one.ItemNo
- WHERE i.RespCatID != 1
- group by r.RespName) AS gt
-
-
-
- ) AS final
- ) AS finalall
-
- group by finalall.RespName, finalall._4Months, finalall._3Months, finalall._2Months, finalall._1Month, finalall.union_order
- order by finalall.union_order;
作者: snoopy11hk 時間: 2015-4-13 23:05
Thanks
仲有一條問題
如果Query中的 _4Months, _3Months 等想改做 03/2015, 02/2015, 01/2015, 12/2014
有 ...
luckiejacky 發表於 2015-4-13 17:27
finalall._4Months AS "03/2015"
作者: luckiejacky 時間: 2015-4-14 11:44
本帖最後由 luckiejacky 於 2015-4-14 17:47 編輯
It's very difficult to achieve, but how can I assign @retval3 to AS?
So the column names are the dates retrieved from the dynamic SQL?
- USE RCS;
- DECLARE @DateColumnsQuery3 NVARCHAR(MAX);
- DECLARE @retval3 NVARCHAR(MAX);
- DECLARE @ParamDefin3 NVARCHAR(MAX);
- DECLARE @DateColumnNames3 NVARCHAR(MAX);
- SET @ParamDefin3 = N'@retvalOUT3 NVARCHAR(MAX) output';
- SET @DateColumnsQuery3 = N'Select @retvalOUT3 = DATEADD(month, -3, GETDATE())';
- EXEC sp_executesql @DateColumnsQuery3, @ParamDefin3, @retvalOUT3=@retval3 OUTPUT;
-
- Select @retval3;
-
- EXEC sp_executesql @DateColumnsQuery3, @ParamDefin3, @retvalOUT3=@retval3 OUTPUT;
-
- DECLARE @DateColumnsQuery2 NVARCHAR(MAX);
- DECLARE @retval2 NVARCHAR(MAX);
- DECLARE @ParamDefin2 NVARCHAR(MAX);
- DECLARE @DateColumnNames2 NVARCHAR(MAX);
- SET @ParamDefin2 = N'@retvalOUT2 NVARCHAR(MAX) output';
- SET @DateColumnsQuery2 = N'Select @retvalOUT2 = DATEADD(month, -2, GETDATE())';
- EXEC sp_executesql @DateColumnsQuery2, @ParamDefin2, @retvalOUT2=@retval2 OUTPUT;
- Select @retval2;
- DECLARE @DateColumnsQuery1 NVARCHAR(MAX);
- DECLARE @retval1 NVARCHAR(MAX);
- DECLARE @ParamDefin1 NVARCHAR(MAX);
- DECLARE @DateColumnNames1 NVARCHAR(MAX);
- SET @ParamDefin1 = N'@retvalOUT1 NVARCHAR(MAX) output';
- SET @DateColumnsQuery1 = N'Select @retvalOUT1 = DATEADD(month, -1, GETDATE())';
- EXEC sp_executesql @DateColumnsQuery1, @ParamDefin1, @retvalOUT1=@retval1 OUTPUT;
- Select @retval1;
- DECLARE @DateColumnsQuery0 NVARCHAR(MAX);
- DECLARE @retval0 NVARCHAR(MAX);
- DECLARE @ParamDefin0 NVARCHAR(MAX);
- DECLARE @DateColumnNames0 NVARCHAR(MAX);
- SET @ParamDefin0 = N'@retvalOUT0 NVARCHAR(MAX) output';
- SET @DateColumnsQuery0 = N'Select @retvalOUT0 = DATEADD(month, -0, GETDATE())';
- EXEC sp_executesql @DateColumnsQuery0, @ParamDefin0, @retvalOUT0=@retval0 OUTPUT;
-
- Select @retval0;
-
- select final.RespName, final._3Months AS @retval, final._2Months AS @retval2 ,final._1Month AS @retval1 , final._0Month @retval0
- from
作者: snoopy11hk 時間: 2015-4-14 22:46
It's very difficult to achieve, but how can I assign @retval3 to AS?
So the column names are the dat ...
luckiejacky 發表於 2015-4-14 11:44
well i bet u need to run twice if u really want to achieve this,
btw why you need dynamic column name?

