Как отключить таблицу с динамическими столбцами - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь транспонировать таблицу с именем CHECK_CARD.Это выглядит так:

 _________________________________________________________________
|       anc_report_date       |  RiskSignal  | group_company_attr |
|_____________________________|______________|____________________|
| 2019-01-01 00:00:00.0000000 | NoRiskSignal |       4894543      |
| 2016-07-01 00:00:00.0000000 |  RiskSignal  |       1242151      |

Я хочу, чтобы это выглядело так:

 ____________________________________________________________________________
|   anc_report_date  |2019-01-01 00:00:00.0000000|2016-07-01 00:00:00.0000000|
|____________________|___________________________|___________________________|
| RiskSignal         |        NoRiskSignal       |        RiskSignal         |
| group_company_attr |          1242151          |          1242151          |

Число строк в anc_report_date является динамическим, поэтому я пытаюсь сделать следующее:

DECLARE @Column NVARCHAR(MAX)
SET @Column
  = 'SELECT cc.anc_report_date
        from CHECK_CARD cc
        inner join CHECK_CARD chc on cc.group_company_attr=chc.group_company_attr and cc.anc_report_date<=chc.anc_report_date and chc.id=1832307
    where cc.status=1'
exec sp_executesql @Column

Здесь я собираю все имена столбцов.

DECLARE @Column NVARCHAR(MAX)
SET @Column
  = 'SELECT cc.anc_report_date
        from CHECK_CARD cc
        inner join CHECK_CARD chc on cc.group_company_attr=chc.group_company_attr and cc.anc_report_date<=chc.anc_report_date and chc.id=1832307
    where cc.status=1'
DECLARE @Transpose as NVARCHAR(MAX)
set @Transpose
  = 'SELECT RiskSignal, group_company_attr
     from CHECK_CARD
     unpivot
     (
        kek
        for anc_report_date in ('+ @Column +')
     ) u'

exec sp_executesql @Transpose;

Но когда я использую все это вместе, возвращается «Неверный синтаксис рядом с ключевым словом« SELECT »».
Я думаю, что эта строка ('+ @Columns +') является причиной.
Есть идеи?

     PRINT @Transpose;
[2019-09-19 18:54:42] [S0001] SELECT RiskSignal, group_company_attr
[2019-09-19 18:54:42] from CHECK_CARD
[2019-09-19 18:54:42] unpivot
[2019-09-19 18:54:42] (
[2019-09-19 18:54:42] kek
[2019-09-19 18:54:42] for anc_report_date in (SELECT cc.anc_report_date
[2019-09-19 18:54:42] from CHECK_CARD cc
[2019-09-19 18:54:42] inner join CHECK_CARD chc on cc.group_company_attr=chc.group_company_attr and cc.anc_report_date<=chc.anc_report_date and chc.id=1832307 where cc.status=1)
[2019-09-19 18:54:42] ) u
[2019-09-19 18:54:42] completed in 3 ms

1 Ответ

0 голосов
/ 20 сентября 2019

Сделано, Спасибо всем!

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(cc.id)
from CHECK_CARD cc
         inner join CHECK_CARD chc
                    on cc.group_company_attr = chc.group_company_attr and cc.anc_report_date <= chc.anc_report_date and
                       chc.id = 1832307
where cc.status = 1
      group by cc.id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'')

set @query = N'SELECT AttrName,' + @cols + N' from
(
  select id, AttrName, value
  from CHECK_CARD
  cross apply
  (
select ''RiskSignal'', cast(RiskSignalas varchar(50)) union all
select ''group_company_attr'', cast(group_company_attr varchar(50))
  ) c(AttrName, value)
) d
pivot
(
  max(value)
  for id in (' + @cols + N')
) piv';

exec sp_executesql @query;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...