SQL - добавление сводки результатов - PullRequest
0 голосов
/ 12 марта 2019

У меня есть скрипт, который возвращает результаты на основе одного или нескольких условий.Есть около 20 или около того столбцов, которые могут иметь результат.Есть ли способ добавить итоговый столбец в конце, чтобы указать, какие столбцы имеют значение для каждой записи?

Редактировать: SQL Server 2008 R2

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Это всего лишь предположение, но вот один из подходов, который будет использовать небольшой XML для решения этой проблемы

* ** 1003 тысяча два * Пример
Declare @YourTable Table (ID int,Col1 varchar(50),Col2 varchar(50),Col3 varchar(50))
Insert Into @YourTable Values 
 (1,'HasValue',null,null)
,(2,'HasValue',null,'ValueHere')


Select A.*
      ,C.*
 From  @YourTable A
 Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
 Cross Apply (
               Select Columns = Stuff((Select ',' +Item 
                From  (
                        Select Item  = xAttr.value('local-name(.)', 'varchar(100)')
                              ,Value = xAttr.value('.','varchar(max)')
                         From  XMLData.nodes('//@*') xNode(xAttr)
                         Where xAttr.value('local-name(.)','varchar(100)') not in ('ID','OtherColumns','ToExclude')
                       )C1
                For XML Path ('')),1,1,'') 
             ) C

Returns

ID  Col1        Col2    Col3        Columns
1   HasValue    NULL    NULL        Col1
2   HasValue    NULL    ValueHere   Col1,Col3
0 голосов
/ 12 марта 2019

Не такое удобное решение, как у Джона, но вот версия с перебором, которая будет работать на более старой версии SQL Server.

DECLARE @t TABLE (
    Col1 BIT,
    Col2 BIT,
    Col3 BIT
)

INSERT INTO @t SELECT 1,NULL,NULL
INSERT INTO @t SELECT NULL,1,NULL
INSERT INTO @t SELECT NULL,NULL,1

SELECT
    *
    ,    CASE WHEN Col1 IS NOT NULL THEN 'Col1: ' + CONVERT(VARCHAR(20),Col1) ELSE '' END
        +CASE WHEN Col2 IS NOT NULL THEN 'Col2: ' + CONVERT(VARCHAR(20),Col2) ELSE '' END
        +CASE WHEN Col3 IS NOT NULL THEN 'Col3: ' + CONVERT(VARCHAR(20),Col3) ELSE '' END
    AS [Summary]
FROM @t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...