Thursday 16 March 2017

Sql query to convert rows into column using Piovt or CTE.



create table #companyvalues
(
companyid           varchar(5),
paramkey            varchar(30),
paramvalue          integer
);

INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'MinLength', 8)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'MaxLength', 0)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'IsAlphanumeric', 1)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'IsCaseSensitive', 0)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'IsSpecialChars', 0)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'PasswordExpiryDays', 80)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'ABC', N'AlertDays', 10)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'MinLength', 7)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'MaxLength', 1)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'IsAlphanumeric', 3)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'IsCaseSensitive', 1)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'IsSpecialChars', 1)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'PasswordExpiryDays', 90)
INSERT #companyvalues ([CompanyId], [ParamKey], [ParamValue]) VALUES (N'XYZ', N'AlertDays', 5)


;with companynames as
(
select distinct companyid compid
from #companyvalues
) ,
details as
(
select * from #companyvalues
)
select compid, max(MinLength) MinLength, max(MaxLength) MaxLength, max(IsAlphanumeric) IsAlphanumeric,
max(IsCaseSensitive) IsCaseSensitive, max(IsSpecialChars) IsSpecialChars, max(PasswordExpiryDays) PasswordExpiryDays,
max(AlertDays) AlertDays
from
(
select compid
, case when  paramkey = 'MinLength'          then paramvalue else -1 end  MinLength        
, case when  paramkey = 'MaxLength'          then paramvalue else -1 end  MaxLength        
, case when  paramkey = 'IsAlphanumeric'     then paramvalue else -1 end  IsAlphanumeric  
, case when  paramkey = 'IsCaseSensitive'    then paramvalue else -1 end  IsCaseSensitive  
, case when  paramkey = 'IsSpecialChars'     then paramvalue else -1 end  IsSpecialChars  
, case when  paramkey = 'PasswordExpiryDays' then paramvalue else -1 end  PasswordExpiryDays
, case when  paramkey = 'AlertDays'          then paramvalue else -1 end  AlertDays        
from companynames, details
where compid = companyid
) finalresult
group by compid
order by 1



select * from
(
select companyid,paramkey,paramvalue from #companyvalues
 )X
 PIVOT
 (
 MAX(paramvalue)
  FOR paramkey IN ([MinLength], [MaxLength],  [IsAlphanumeric],     [IsCaseSensitive],    [IsSpecialChars],  [PasswordExpiryDays],[AlertDays])  
 )Y     

No comments:

Post a Comment