我需要显示一个结果,以便我可以提取它。
这是我的名为' TRY'
的表格id | type |
01 | A |
01 | D |
01 | A |
我的查询是这样的:
select
lpad(id,2,'0')||
lpad(count(case when type = 'A' then 1 end),3,'0')||
lpad(count(case when type = 'D' then 1 end),3,'0')||
lpad(count(case when type in ('A','D') then 1 end),3,'0') then 1 end)
as results
from
TRY
group by
id
,type
我希望结果显示为01002001003
,但我得到2个结果,就像这样
01002000002
和01000001001
。我只想把计数结果合二为一。
答案 0 :(得分:0)
我认为你需要考虑的主要问题是GROUP BY
clause实际上是如何运作的,因为你实际按id
和type
分组,这意味着你永远不会对于同一行中的类型A和类型D具有正数,因为它们未组合在一起。
在您的示例中,我注意到以下内容并对这些参数起作用:
GROUP BY id
(不是GROUP BY id, type
)您实际上也希望使用SUM
function代替COUNT
,因此以下内容应该有效:
<强>的Oracle / PLSQL 强>
SELECT
LPAD(id,2,'0')
|| LPAD(SUM(CASE WHEN type = 'A' THEN 1 ELSE 0 END),3,'0')
|| LPAD(SUM(CASE WHEN type = 'A' THEN 1 ELSE 0 END),3,'0')
|| LPAD(SUM(CASE WHEN type = 'A' OR type = 'D' THEN 1 ELSE 0 END),3,'0')
AS results
FROM
TRY
GROUP BY
id
在您不太可能实际使用SQL Server或其他数据库引擎的情况下,LPAD
函数实际上无法正常工作,因此使用以下行中的内容可能会起作用。 (如果一些非ORACLE用户有类似的窘境并且它是我用来解决你的问题的话,还会添加)
SELECT
[results] =
RIGHT('00' + CONVERT(VARCHAR,[id]),2)
+ RIGHT('000' + CONVERT(VARCHAR,SUM(CASE WHEN [type] = 'A' THEN 1 ELSE 0 END)),3)
+ RIGHT('000' + CONVERT(VARCHAR,SUM(CASE WHEN [type] = 'D' THEN 1 ELSE 0 END)),3)
+ RIGHT('000' + CONVERT(VARCHAR,SUM(CASE WHEN [type] = 'A' OR type = 'D' THEN 1 ELSE 0 END)),3)
FROM
[TRY]
GROUP BY
[id]