By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE ItemsTable (
ID int,
Name varchar(50),
IsEnabled int,
ObjectName varchar(50),
PropertyName varchar(50),
PropertyValueString varchar(50),
PropertyValueInt int
)
INSERT INTO ItemsTable
VALUES
(1, 'Rule01', 1, 'MyObject', NULL, NULL, NULL),
(2, 'Rule02', 1, 'MyObject', NULL, NULL, NULL),
(3, 'Rule03', 1, 'MyObject', NULL, NULL, NULL),
(4, 'Rule04', 1, 'MyObject', NULL, NULL, NULL),
(5, 'Rule05', 1, 'MyObject', NULL, NULL, NULL),
(6, 'Prop01', 0, 'MyObject', 'Prop01', '$', NULL),
(7, 'Prop02', 0, 'MyObject', 'Prop02', NULL, 45)
7 rows affected
DECLARE @objectName varchar(50) = 'MyObject'
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SELECT
@cols = @cols + QUOTENAME(Name) + ','
FROM
(SELECT DISTINCT Name
FROM ItemsTable
WHERE LOWER(ObjectName) = LOWER(@objectName)
GROUP BY Name) AS tmp
SELECT @cols = SUBSTRING(@cols, 0, LEN(@cols))
SET @query =
'SELECT * FROM
(
SELECT
[Name]
,CAST(NULLIF([IsEnabled], 0) AS VARCHAR(50)) as [ValueColumn]
,[ObjectName]
FROM ItemsTable
UNION
SELECT
[Name]
,[PropertyValueString] as [ValueColumn]
,[ObjectName]
FROM ItemsTable
UNION
SELECT
[Name]
,CAST([PropertyValueInt] AS VARCHAR(50)) as [ValueColumn]
,[ObjectName]
FROM ItemsTable
) src
ObjectName | Prop01 | Prop02 | Rule01 | Rule02 | Rule03 | Rule04 | Rule05 |
---|---|---|---|---|---|---|---|
MyObject | $ | 45 | 1 | 1 | 1 | 1 | 1 |
SELECT * FROM
(
SELECT
[Name]
,CAST(NULLIF([IsEnabled], 0) AS VARCHAR(50)) as [ValueColumn]
,[ObjectName]
FROM ItemsTable
UNION
SELECT
[Name]
,[PropertyValueString] as [ValueColumn]
,[ObjectName]
FROM ItemsTable
UNION
SELECT
[Name]
,CAST([PropertyValueInt] AS VARCHAR(50)) as [ValueColumn]
,[ObjectName]
FROM ItemsTable
) src
pivot
(
max(ValueColumn) for Name in ([Prop01],[Prop02],[Rule01],[Rule02],[Rule03],[Rule04],[Rule05])
) piv
DECLARE @objectName varchar(50) = 'MyObject'
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SELECT
@cols = @cols + QUOTENAME(Name) + ','
FROM
(SELECT DISTINCT Name
FROM ItemsTable
WHERE LOWER(ObjectName) = LOWER(@objectName)
GROUP BY Name) AS tmp
SELECT @cols = SUBSTRING(@cols, 0, LEN(@cols))
SET @query =
'SELECT * FROM
(
SELECT
I.Name
,V.ValueColumn
,I.ObjectName
FROM ItemsTable I
CROSS APPLY (
SELECT COALESCE(
I.PropertyValueString,
CAST(I.PropertyValueInt AS VARCHAR(50)),
CAST(I.IsEnabled AS VARCHAR(50))
) AS ValueColumn
) V
) src
pivot
(
max(ValueColumn) for Name in (' + @cols + ')
) piv'
ObjectName | Prop01 | Prop02 | Rule01 | Rule02 | Rule03 | Rule04 | Rule05 |
---|---|---|---|---|---|---|---|
MyObject | $ | 45 | 1 | 1 | 1 | 1 | 1 |
SELECT * FROM
(
SELECT
I.Name
,V.ValueColumn
,I.ObjectName
FROM ItemsTable I
CROSS APPLY (
SELECT COALESCE(
I.PropertyValueString,
CAST(I.PropertyValueInt AS VARCHAR(50)),
CAST(I.IsEnabled AS VARCHAR(50))
) AS ValueColumn
) V
) src
pivot
(
max(ValueColumn) for Name in ([Prop01],[Prop02],[Rule01],[Rule02],[Rule03],[Rule04],[Rule05])
) piv