使用Oracle将垂直数据显示为水平数据,防止重复记录

时间:2014-12-02 11:51:09

标签: mysql sql oracle select group-by

查询表格" 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

在这里,您可以观察到名称为User_ID的{​​{1}} 3重复两次,但时间为zam8。如果我4,则会显示单个条目,但group_by显示将是一个问题。

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

3 个答案:

答案 0 :(得分:1)

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

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

我错过了什么吗?

答案 1 :(得分:0)

SELECT User_ID, Name, SUM(UserHours)
FROM table t
GROUP BY User_ID, Name
ORDER BY User_ID, Name;

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

答案 2 :(得分:0)

试试这个:

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 |