TSQL: простая точка, отличные ячейки. Не могу заставить это работать - PullRequest
0 голосов
/ 29 ноября 2010

Проблема:

У меня есть таблица из двух столбцов: Книги и Темы, и в одной теме может быть указано несколько Книг, и наоборот.

Я пытаюсьпосчитайте различное количество встречающихся книг и примените их к центру.У меня есть следующая структура кода:

With dataSource 
as (
select book_id, topic_id
FROM BKINFO.BookTopics
    )
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

Сводные операторы и другие варианты выбора предназначены для удовлетворения требований вопроса.(Это для онлайн-курса) Вывод данных должен выглядеть следующим образом:

CmpSci      CmpPgm      DB          SQL         XML         Science     Lit
----------- ----------- ----------- ----------- ----------- ----------- -----------
0           28          9           40          2           10          3

Что мне здесь не хватает?я потратил около 4 часов, пытаясь понять это, и это кажется слишком простым.

Спасибо!

1 Ответ

0 голосов
/ 29 ноября 2010

Хорошо, поэтому, если порядок темы, в которой будет подсчитана книга, не имеет значения, решение на самом деле очень простое, вам просто нужно сделать 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 для этого столбца.

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