サンプルデータ
srNO productname StartDate AStartdate pStartdate
1 new 11-11-2010 11-11-2010 11-11-2010
2 old 01-01-2011 11-11-2011 09-11-2010
3 medium 01-01-2012 01-01-2012 16-07-2012
4 out 01-08-2012 16-01-2012 16-07-2012
私の質問
ALTER PROCEDURE [dbo].[Status_yearly]
(@MID NVARCHAR(max))
AS
BEGIN
DECLARE @Years nvarchar(max)
SELECT @Years = Stuff((SELECT DISTINCT ',['
+ Cast(Year(u.StartDate) AS
NVARCHAR(4
))
+ ']'
FROM [products] u
FOR xml path('')), 1, 1, '')
DECLARE @date nvarchar(max)
SET @date =CONVERT(VARCHAR(10),GETDATE(),105)
-- SELECT @date
DECLARE @SQL nvarchar(max)
SELECT @SQL = '
select
*
from (
select
''Product'' AS Status,''total_product'' as [YEAR],
productname, year(u.StartDate) as [y]
from products u WHERE
MID ='''+@MID+'''
AND u.Flag <> 0
) Data
PIVOT (
COUNT(productname)
FOR [y]
IN (
' + @Years + '
)
) PivotTable
UNION ALL
select
*
from (
select ''Finished'' AS Finished,
''In Time'' as [YEAR],
Coalesce(COUNT(productsname),0) AS productsname, Coalesce(COUNT(year(u.StartDate)),0) as [y]
from products u WHERE u.AStartdate IS NOT NULL
AND u.AStartdate = u.pStartdate
AND MID ='''+@MID+'''
) Data
PIVOT (
COUNT(productsname)
FOR [y]
IN (
' + @Years + '
)
) PivotTable
'
EXECUTE (@SQL)
END
これで結果が得られます
状況 2012 年 製品合計_製品 4 時間内に終了しました 0
select ''Finished'' AS Finished,
''In Time'' as [YEAR],
Coalesce(COUNT(productsname),0) AS productname, Coalesce(COUNT(year(u.StartDate)),0) as [y]
from products u WHERE u.AStartdate IS NOT NULL
AND u.AStartdate = u.pStartdate
AND MID ='''+@MID+'''
これは私に次のような結果を与えています
Finished YEAR productname Y
FINISHED In Time 1 1
個別には1としてカウントされますが、ストアドプロシージャ内で実行すると0になります。
手順内でこれを実装するにはどうすればよいですか?「終了」ブロックに結果セットがない場合があることに注意してください。これが私が使用している理由です
Coalesce(COUNT(productsname),0) AS productname, Coalesce(COUNT(year(u.StartDate)),0)
提案してください..
データベースは SQL Server