Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

UNPIVOT में NULL मान संभालें

यह बदसूरत है लेकिन NULL के लिए एक आउट-ऑफ-बैंड प्रतिस्थापन खोजने पर निर्भर नहीं करता है :

declare @pivot_task table
(
age int null,
[a] numeric(8,2),
[b] numeric(8,2),
[c] numeric(8,2),
[d] numeric(8,2),
[e] numeric(8,2)
);

insert into @pivot_task values (18, 0.5, null, 0.6, 1.21, 1.52),
(19, 7.51, 6.51, 5.51, null, 3.53),
(20, 4.52, 4.52, 6.52, 3.53, null);


select a.age, pmu.[over], [av]
from (select 'a' as [over] union all select 'b' union all select 'c'
        union all select 'd' union all select 'e') pmu
cross join (select age from @pivot_task) as a
left join
@pivot_task pt
unpivot
(
 [av]
 for [over] in ([a], [b], [c], [d], [e])
) ex
on pmu.[over] = ex.[over] and
   a.age = ex.age

परिणाम:

age         over av
----------- ---- ---------------------------------------
18          a    0.50
18          b    NULL
18          c    0.60
18          d    1.21
18          e    1.52
19          a    7.51
19          b    6.51
19          c    5.51
19          d    NULL
19          e    3.53
20          a    4.52
20          b    4.52
20          c    6.52
20          d    3.53
20          e    NULL

लेकिन अगर आप इस रास्ते से नीचे जा रहे हैं, तो आप UNPIVOT . को हटा सकते हैं पूरी तरह से:

select a.age, pmu.[over],
      CASE pmu.[over]
           WHEN 'a' THEN a.a
           WHEN 'b' THEN a.b
           WHEN 'c' THEN a.c
           WHEN 'd' THEN a.d
           WHEN 'e' THEN a.e
        END [av]
from (select 'a' as [over] union all select 'b' union all select 'c'
        union all select 'd' union all select 'e') pmu
cross join @pivot_task as a


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नेटिव मोड में SQL रिपोर्टिंग सर्विसेज 2008 का धीमा स्टार्टअप

  2. SQL सर्वर में लॉगऑन ट्रिगर

  3. SQL सर्वर 2012/2014 में छिपे हुए प्रदर्शन और प्रबंधनीयता में सुधार

  4. डेटटाइम टू टाइम कास्ट कैसे करें

  5. सर्वर एजेंट में निष्पादित एसएसआईएस पैकेज अपना काम नहीं करता है (सफलता की रिपोर्ट करते समय भी)