0

皆さん、良い昼/夜。私はストアド プロシージャを初めて使用します。ストアド プロシージャに関しては、経験と理解が不足しています。他のチュートリアルと回答を試しましたが、isnull(payment,'0') または coalesce(payment,'0') を使用したときにクエリが機能しなかった理由がわかりません。

declare @sql as nvarchar(max) = '[2013-04-01],[2013-04-02],[2013-04-03],[2013-04-04],[2013-04-05],[2013-04-06]';
declare @name as nvarchar(max) = 'Derichel'
set @sql =
'SELECT pid, [Fullname], ' + @sql + '
FROM
(SELECT pid, [Fullname], payment, dateregistration
from tbl_Personal
) AS s
PIVOT
(
min(payment)
FOR dateregistration IN (' + @sql + ')
) AS pvt
where [Fullname] = ''' + @name + '''
order by pid'
execute sp_executesql @sql;

一部の回答とチュートリアルでは、IN () 内の列が固定されています。私の@sqlは別の日付に設定されています(GUIからのユーザー入力に依存します)。

null 値を 0 に置き換えるにはどうすればよいですか?

上記のコードの出力は

pid Fullname [2013-04-01] [2013-04-02] [2013-04-03] [2013-04-04] [2013-04-05] [2013-04-06]

6   Derichel     NULL         NULL          NULL         NULL        NULL           0

nullを0に置き換えたい。

4

1 に答える 1

1

日付の行がないため、NULL 値を取得しています。ISNULLルート クエリに関数を含めようとすると( SELECT ... FROM tbl_Personal)、変更するものはありません (行が存在しません)。

操作の結果として NULL 値が表示されるため、データがピボットPIVOTされた後に を適用する必要があります。それを見る別の方法は、最初の節である最終結果の定義にISNULLを適用することです。ISNULLSELECT

動的ピボット クエリの書式を設定していない SQL ステートメントを次に示します。

SELECT pid, [Fullname],
  ISNULL([2013-04-01], 0) AS [2013-04-01],
  ISNULL([2013-04-02], 0) AS [2013-04-02],
  ISNULL([2013-04-03], 0) AS [2013-04-03],
  ISNULL([2013-04-04], 0) AS [2013-04-04],
  ISNULL([2013-04-05], 0) AS [2013-04-05],
  ISNULL([2013-04-06], 0) AS [2013-04-06]
FROM
(SELECT pid, [Fullname], payment, dateregistration
from tbl_Personal
) AS s
PIVOT
(
min(payment)
FOR dateregistration IN ([2013-04-01],[2013-04-02],[2013-04-03],[2013-04-04],[2013-04-05],[2013-04-06])
) AS pvt
where [Fullname] = 'Derichel'
order by pid

動的クエリの場合、現在使用している両方の場所で @SQL 変数を使用することはできません。最初のインスタンスにはISNULL、2 番目のインスタンス ( ) では許可されていない関数呼び出しが含まれますFOR dateregistration IN...

于 2013-06-02T03:11:40.123 に答える