【问题标题】:SQL Aggregation and GroupingSQL 聚合和分组
【发布时间】:2017-10-03 21:15:27
【问题描述】:

刚刚深入研究 SQL,并看到了我喜欢的报告格式,并希望这是正确的论坛。我熟悉基本的选择语句和分组,但我不知道如何做到这一点,或者是否可以使用单个数据表。

无论如何,下面是我的表格示例。 表:

Item      Loc   Frozen     Scanned    Adj
1457481   85      0         1          1
1457481   85      0         1          1
1457481   25      1         1          0
1457481   25      1         1          0
1457481   35      1         1          0
1457481   45      1         1          0

Here is the format I would like to show:

Item       GoodLoc     Adj
1457481     2@25       2@85
            1@35
            1@45    


这甚至可以在不加入其他表的情况下实现吗?非常感谢任何帮助。

【问题讨论】:

  • Stack Overflow不是免费的代码编写服务。您应该尝试自己编写代码。在doing more research 之后,如果您有问题,您可以发布您尝试过的内容,并清楚地解释什么不起作用,并提供一个minimal reproducible example 。我建议阅读How to Ask 一个好问题和the perfect question。另外,请务必使用tour
  • 是的,这是可能的,尽管您的格式对于显示结果来说是非常规的。本质上,首先你只需要对你的冻结/调整列进行求和,按你的 item 和 loc 列分组。这将为您提供一个可以使用的基本结果集。要获得您的特定格式,需要对行号和自联接有点奇怪。
  • SQL 不能很好地用作表示层。使用 SQL 获取数据(进行求和/聚合/连接),使用另一种语言来显示它们。
  • 谢谢。如果可能的话,这只是一个普遍的问题。我也在涉足 SSRS,这似乎是要走的路。赞赏!

标签: sql sql-server reporting-services


【解决方案1】:

如果没有问题的更多细节,这只是猜测,但这里有一个可能的解决方案:

假设表:

CREATE TABLE Items
(
    item    INT,
    Loc     INT,
    Frozen  BIT,
    Scanner BIT,
    Adj     BIT
)

试试

SELECT  DISTINCT
        Item,
        CASE
            WHEN Frozen = 0
            THEN NULL
            ELSE CONVERT(VARCHAR(5),COUNT(Loc) OVER (PARTITION BY Loc)) + '@' + CONVERT(VARCHAR(5),Loc)
        END As GoodLoc,
        CASE
            WHEN Adj = 0
            THEN NULL
            ELSE CONVERT(VARCHAR(5),COUNT(Adj) OVER (PARTITION BY Adj)) + '@' + CONVERT(VARCHAR(5),Loc)
        END As Adj
FROM    Items
ORDER BY GoodLoc DESC

正如其他人所说,您似乎正在尝试呈现应该在表示层 (SSRS) 而不是 Management Studio 中执行的数据

【讨论】:

  • 谢谢。只是好奇是否可能。欣赏代码,如果我需要它作为参考,我会注意到它。非常感谢。
猜你喜欢
  • 2018-08-19
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多