Hi anonymous user,
You could add one CTE to convert all columns to the same data type first.
Please refer below query:
drop table if exists test
Create table test
(columnname1 nvarchar(255),
columnname2 nvarchar(255),
columnname3 nvarchar(255),
columnname4 float )
insert into test
values ('Pink','Red','Blue',1.0)
,(' ',' ','Brown',NULL)
,(' ',' ','Red',2.0)
,('Yellow',' ',' ',NULL)
;with cte as
(select columnname1,columnname2,columnname3,cast(columnname4 as nvarchar(255)) as columnname4 from test)
select name,[Y] as value1,cast((sum-[Y]) as float)/sum as value2
from
(
select Name,iif(Value='','N','Y') value,(select count(*) from test) sum
from cte
unpivot
(
Value
for Name in (columnname1, columnname2,
columnname3,columnname4) --add new column name here
) unp
) src
pivot
(
count(value)
for value in ([Y], [N])
) piv
If above is still not working, please provide your sample data and expected output.
Best regards
Melissa
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.