J'utilise MS-SQLServer-2016 et j'ai besoin d'une transposition des lignes en colonnes. J'utilise Pivot et l'option SQL dynamique pour le faire car le nombre de lignes est dynamique. Figure1 est la sortie que je reçois actuellement. Cependant, le client ne veut pas que ces valeurs NULL soient affichées. Il veut seulement que les dates Not-Null soient affichées. Est-il possible de se débarrasser de ces valeurs nulles et d'afficher uniquement des dates distinctes?Microsoft SQL Server ramène la colonne à l'aide de PiVOT
Avec Cordialement,
Tanuja
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);`
[Les mauvaises habitudes pour donner le coup: en utilisant ancienne JOIN - Aaron Bertrand] (http://sqlblog.com/blogs/aaron_bertrand/archive /2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) – SqlZim
Pourquoi ne créez-vous pas un jeu de résultats Table Based on Row de Table réelle que vous utilisez. –
Vous devez réduire le 'de (select ...)' aux colonnes que vous voulez 'pivot() 'avec les colonnes à faire pivoter. Ensuite, joignez le résultat de votre 'pivot()' pour ajouter toutes ces autres colonnes. – SqlZim