Хорошо, поэтому, если порядок темы, в которой будет подсчитана книга, не имеет значения, решение на самом деле очень простое, вам просто нужно сделать MIN
или MAX
над topic_id при определенииваш Datasource
стол.Таким образом, это будет выглядеть так:
With dataSource
as (
select book_id, MIN(topic_id) AS topic_id -- it can be MAX(topic_id) as well
FROM BKINFO.BookTopics
GROUP BY book_id
)
select
[CS] as 'CmpSci'
,[PGM] + [NET] + [VB] as 'CmpPgm'
,[DB] as 'DB'
,[SQL]+[MYSQL]+[ORA]+[SSRV] as 'SQL'
, [XML]as 'XML'
, [SCI] as 'Science'
, [POE] + [FCT] as 'Lit'
from dataSource
pivot(
count(book_id)
for topic_id
in([CS],[PGM],[NET],[VB],[DB],[SQL],[MYSQL],[ORA],[SSRV], [XML],
[SCI], [POE], [FCT])
)tblPivot
Вы должны знать, что книга считается только в той минимальной (или максимальной) теме, в которой она появляется.Теперь, если вы хотите, чтобы книга учитывалась по теме в определенном порядке, я рекомендую вам создать таблицу topic
с столбцом id
int в том порядке, в котором вы хотите (в этом случае CS будет id1, идентификатор PGM 2 и т. Д.), И в таблице datasource
вычислите MIN
для этого столбца.