【问题标题】:Oracle aggregated queryOracle 聚合查询
【发布时间】:2011-07-11 21:54:26
【问题描述】:

ColA ColB ColC ColD
数据 1 比率 T 测试 1
数据 1 比率 3 F 测试 2
数据 1 比率 2 T 测试 1
数据 2 比率 T 测试 1
数据 2 比率 3 T 测试 1
data3 rata4 T Test1

有四列类型为 Varchar。我想确定的是:-
1. 对于 ColB (rata1, rata2 etc) 的每个唯一值,找到 ColA 和其他两列 (ColC, ColD) 的对应值,其中 ColA 的特定值的 ColC 值等于 'T' 0 或 1 次。

rata2 data1 T Test1
rata3 data2 T Test1 
rata4 data3 T Test1


2. 在上述查询中,当 ColC 等于 'T' 0 或 1 次时,针对 ColB 的特定值,查找 ColA 的 ColC 等于 'F' 的其他行。

rata3 data1 F Test2  

【问题讨论】:

  • 这完全没有意义。
  • @Isaac:请查看其他回复和我对此的评论。

标签: sql group-by oracle11g varchar


【解决方案1】:

根本不明白你的问题。如果你说别的,我会更正答案。但据我了解,你想要这样的东西?

编辑:我在数据库中制作了您提供给我们的同一张表。这很好用。试一试,告诉我它是否有效

SELECT COLUMNB,MAX(COLUMNA), MAX(ColumnC), MAX(COLUMND)
FROM DUMMY
WHERE ColumnC = 'T'
GROUP BY COLUMNB
HAVING SUM(CASE WHEN COLumnC = 'T' THEN 1 ELSE 0 END) <= 1

UNION ALL
SELECT * 
FROM  DUMMY
WHERE COLumnC = 'F'

编辑 2: 这个怎么样?

WITH B
AS(
SELECT A.COLUMNB, MAX(A.COLUMNA) AS COLUMNA, MAX(A.ColumnC) AS COLUMNC, MAX(A.COLUMND) AS COLUMND
FROM DUMMY A
GROUP BY A.COLUMNB
HAVING SUM(CASE WHEN A.COLumnC = 'T' THEN 1 ELSE 0 END) <= 1)


SELECT * 
FROM B 

UNION ALL
SELECT D.COLUMNB, D.ColumnA, D.ColumnC, D.ColumnD
FROM B, DUMMY D
WHERE  B.ColumnB = D.COLUMNB
AND D.ColumnC = 'F'

【讨论】:

  • 非常感谢您的宝贵建议。他们非常有帮助。第一个查询运行良好,其中对于 ColB 的每个唯一值,您检索到 ColA 的特定值的 ColC 值等于 'T' 0 或 1 次的值。现在,在查询 2 的这种情况下,如果 ColA 的特定值 ColC 等于 'T' 0 或 1 次,则针对 ColB 的特定值查找 ColA 的 ColC 等于 'F' 的那些行。如果有不清楚的地方,请提出问题。
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 2014-11-26
  • 2013-12-06
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多