TSQL:简单的枢轴,不同的单元格。无法让它工作
Posted
技术标签:
【中文标题】TSQL:简单的枢轴,不同的单元格。无法让它工作【英文标题】:TSQL: Simple Pivot, Distinct Cells. Can't get it working 【发布时间】:2010-11-29 03:57:21 【问题描述】:问题:
我有一个包含两列的表:书籍和主题,单个主题可以引用多本书,反之亦然。
我正在尝试计算出现的不同书籍数量,并将它们应用于枢轴。以下代码结构是我目前所拥有的:
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]+[s-s-rV] 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],[s-s-rV], [XML],
[SCI], [POE], [FCT])
)tblPivot
枢轴语句和其他选择可以满足问题的要求。 (这是针对在线课程的)数据输出应如下所示:
CmpSci CmpPgm DB SQL XML Science Lit
----------- ----------- ----------- ----------- ----------- ----------- -----------
0 28 9 40 2 10 3
我在这里缺少什么?我花了大约 4 个小时试图弄清楚这一点,这似乎太简单了。
谢谢!
【问题讨论】:
你得到的当前输出是什么?此外,如果您需要计算不同的书籍,那么您应该这样指定:count(distinct book_id)。 似乎有什么问题? 我得到的数据输出就是我上面贴的。我尝试添加不同的,但是当您将它放在数据透视语句中时会导致错误。向 Select 子句添加 distinct 没有任何作用,因为两列都变得不同。 @Astander:我正在尝试获取 book_id 的不同计数,目前它不止一次计算具有多个主题的书籍。 理想情况下,我可以按如下方式逐步执行逻辑:计算所有 topic_id 为 x 的 book_id,然后计算所有 book_id 的 topic_id 为 y,不包括之前计算的,直到我计算完所有 book_id 的 【参考方案1】:好的,所以如果计算书中的主题顺序无关紧要,解决方案实际上非常简单,您只需在定义时在 topic_id 上执行 MIN
或 MAX
你的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]+[s-s-rV] 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],[s-s-rV], [XML],
[SCI], [POE], [FCT])
)tblPivot
您应该知道,这本书只计入它出现的最小(或最大)主题。现在,如果您希望按照特定顺序对主题进行计数,那么我建议您创建一个表topic
,并按照您喜欢的顺序包含一个id
int 列(在这种情况下,CS 将是 id 1、PGM id 2 等),并在 datasource
表中计算该列上的 MIN
。
【讨论】:
从这里看起来不错。我不知道最小/最大功能会执行该操作吗?我需要更多地阅读它们。我认为我唯一可能需要添加的是在该 select 语句的末尾有一个“group by book_id”子句。 是的,我忘记了“分组依据”。我需要更加小心。我现在编辑了答案。以上是关于TSQL:简单的枢轴,不同的单元格。无法让它工作的主要内容,如果未能解决你的问题,请参考以下文章
向左滑动删除单元格在 ios 8 中无法正常工作,但在 ios 7 中有效