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 上执行 MINMAX你的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 中有效

Excel 2016中的条件格式减去空白单元格

范围格式中每个单元格的 VBA 百分比

无法让 UITableViewAutomaticDimension 正常工作

自定义 UITableview 单元格可访问性无法正常工作