【问题标题】:Display Vertical data into Horizontal data with Oracle preventing duplicate records使用 Oracle 将垂直数据显示为水平数据,防止重复记录
【发布时间】:2015-01-30 15:49:21
【问题描述】:

查询表“user_hours”并获取以下格式的数据:

ID   User_ID  Name   Date       User Hours
---  ------  ----  ---------   -------
1    1       foo   1-12-2014   null
2    2       bar   1-12-2014   null
3    3       zam   2-12-2014   8
4    3       zam   3-12-2014   4

我正在尝试获取查询,因此具有相同 User_ID 的记录应显示如下:

User_ID  Name   Date       User Hours
------  -----  -----       -----
1       foo    1-12-2014   null
2       bar    1-12-2014   null
3       zam    2-12-2014   8
3       zam    3-12-2014   4

在这里您可以观察到名称为zamUser_ID 3 重复了两次,但时间为84。如果我 group_by 则将显示单个条目,但 hours 显示将是一个问题。

如何防止重复显示 User_ID 并显示相关 DateHours 的正确时间。

【问题讨论】:

  • 在标题中你说“Oracle”,但你已经用mysql 标记了这个问题 - 你真正使用的是什么?

标签: mysql sql oracle select group-by


【解决方案1】:

据我所知,您想要的查询是:

SELECT User_ID, Name, Date, UserHours
FROM table t
ORDER BY User_ID, Date;

我错过了什么吗?

【讨论】:

    【解决方案2】:
    SELECT User_ID, Name, SUM(UserHours)
    FROM table t
    GROUP BY User_ID, Name
    ORDER BY User_ID, Name;
    

    如果我理解正确,你想显示小时总和,对吧?

    【讨论】:

    • 我们如何证明user_id=3date = 2-12-2014 的小时数是8date = 3-12-2014 的小时数是4
    • SELECTGROUP BY 子句中添加UserHours
    • 查询会不会像SELECT user_id, name, hours, SUM(hours) FROM table supportContacts GROUP BY user_id, name, hours ORDER BY user_id, name;
    • 我仍然没有准确地得到您的要求。您似乎想在 2D 视图中显示 3D 数据。要么你必须用双倍的名字生活,要么有几个小时的总和。
    • 这里有任何替代代码吗?你的想法是正确的。或者通过php循环我们可以显示。
    【解决方案3】:

    试试这个:

    SELECT a.user_id, a.name, a.date_ent, SUM(a.hours) hours
    FROM supportContacts a
    GROUP BY a.user_id, a.name, a.date_ent
    ORDER BY a.user_id, a.name, a.date_ent
    

    查看SQL FIDDLE DEMO

    输出

    | USER_ID | NAME |  DATE_ENT | HOURS |
    |---------|------|-----------|-------|
    |       1 |  foo | 1-12-2014 |     0 |
    |       2 |  bar | 1-12-2014 |     0 |
    |       3 |  zam | 2-12-2014 |     8 |
    |       3 |  zam | 3-12-2014 |     4 |
    

    【讨论】:

    • @Slimshadddyyy 用小提琴演示检查我的更新答案
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2022-11-16
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多