-1

サンプルデータ

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

4

1 に答える 1

0

flagサンプルデータにandmid列がないという事実に加えて(テーブルにあると思います)、問題は間違った列名が使用されているようです。

COUNT(productsname)する必要があります( sCOUNT(productname)を削除)。

于 2012-07-16T13:48:19.377 に答える