Нужно поворачивать или перекрестную таблицу, но не обычным способом. пожалуйста - PullRequest
0 голосов
/ 06 января 2012

У меня небольшая ситуация ... надеюсь, вы, ребята, сможете мне помочь.

Я должен запросить таблицу, в которой есть 4 столбца
AccountNo, ResourceNo, ProductNo, CustomerNo.
У нескольких аккаунтов No есть 2 ResourceNo's (115 и 134)

Мне нужно сделать запростаким образом, что я должен показать два динамических столбца для значений resourceNo и поставить 'X' против accountNo, который имеет эти ResourceNo 's. Так что AccountNo не повторяется ..Поворот не помогает в этой ситуации.Пожалуйста, посмотрите на это и помогите мне.

См. Также

Сводка SQL для бедных.

См. Также

Sql Pivot Query с динамическими столбцами

1 Ответ

0 голосов
/ 06 января 2012

Вам нужен пивот бедняков:

Статические столбцы

Например:

select 
    AccountNo,
    case when sum(case when ResourceNo = 134 then 1 else 0 end) = 0 then '' else 'X' end as Resource_134,
    case when sum(case when ResourceNo = 115 then 1 else 0 end) = 0 then '' else 'X' end as Resource_115
from 
    AccountResource 
group by
    AccountNo

Пример данных:

AccountNo ResourceNo ProductNo CustomerNo
A1        134        P1         C1
A1        134        P2         C1
A1        134        P3         C2
A2        134        P1         C1
A2        115        P1         C4
A2        115        P2         C1
A3        115        P5         C2

Пример вывода:

AccountNo Resource_134 Resource_115
A1        X
A2        X            X
A3                     X

Динамические столбцы

Для динамических столбцов вы можете сделать следующее:

declare @sql nvarchar(max)
set @sql = ''
select @sql = @sql + ',' + char(13)+char(10)+
'case when sum(case when ResourceNo = ''' + replace(cast(ResourceNo as nvarchar(10)), '''', '''''') + ''' then 1 else 0 end) = 0 then '''' else ''X'' end as "Resource_' + replace(cast(ResourceNo as nvarchar(10)), '"', '""') + '"'
from AccountResource 
group by ResourceNo
order by Resourceno

set @sql = 'select AccountNo' + @sql
+ char(13)+char(10)
+ 'From AccountResource '
+ char(13)+char(10)
+ 'group by AccountNo'
+ char(13)+char(10)
+ 'order by AccountNo'
select * from datacheck.dbo.splitmax(@sql, null,null)

exec sp_executesql @sql
...