MS-SQLServer-2016を使用していて、行を列に転記する必要があります。 ピボットと動的SQLオプションを使用して、行数が動的であるため、このオプションを使用しています。 図1は現在私が得ている出力です。しかし、クライアントはそれらのNULLを表示したくありません。彼はNot-Nullの日付を表示するだけです。 Null値を取り除き、異なる日付のみを表示する方法はありますか?Microsoft SQL Serverの列をPiVOTを使用して列を転置する
に関して、
タヌジャ
DECLARE @columns AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX), @var1 AS
VARCHAR(MAX);
SELECT @columns = stuff((select DISTINCT ',' + quotename(replace(replace(replace(n.action_note,' ','<>'),'><',''),'<>',' '))
from engagement_action n, action_party m, personal p
where n.action_id = m.action_id
and p.party_id = m.party_id
and n.action_note like 'XXX'
and m.system_name = 'XXXXXXXXXXXX'
and p.customer_number = 'XXXXXXX' FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'')
SELECT @sql =
'select "RANK_IN_PROP" ,
customer_number,
customer_shortname,
system_name,
'+ @columns + '
from
(SELECT RANK() OVER (PARTITION BY convert(date,m.created_when) ORDER BY convert(date,m.created_when))"RANK_IN_PROP" ,
p.customer_number,
p.customer_shortname,
m.system_name,
m.created_when ,
convert(date,m.created_when) as created_when,
replace(replace(replace(n.action_note,'' '',''<>''),''><'',''''),''<>'','' '') as action_note1
FROM engagement_action n, action_party m, personal p
WHERE n.action_id = m.action_id
AND p.party_id = m.party_id
AND n.action_note like ''%XXX%''
AND m.system_name = ''XXXXXXXXXXX''
AND p.customer_number = ''XXXXXXXX'') d
PIVOT
(max(created_when) for action_note1 in (' + @columns + '))p order by created_when desc'
execute(@sql);`
[アーロンベルトラン使用して、古いスタイルJOINをキックする悪い習慣]を実行することができませんでした/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) – SqlZim
使用している実績表の行結果セットを作成しないでください。 –
'from(select ...)'を 'pivot()'とする列だけでなく、カラムをピボットするように減らす必要があります。次に、 'pivot()'の結果に参加して、他のすべての列を追加します。 – SqlZim