我想知道查询,我可以在哪里获得正常的列集,并添加一个包含数据库中记录数的列。
例如,假设我有这些数据..
ColA ColB ColC
---- ---- ----
1AB1 CARR APPL
2BC1 APPL APPL
1AB1 MAXR APPL
从这些方面来说,我想生成这些列
ColA ColB ColC Count
---- ---- ---- -----
1AB1 CARR APPL 2
一个。这是我目前的选择陈述。
SELECT top 1 myTBL.* from mydb WHERE ColA = '1AB1'
B中。但我似乎无法添加以下代码来获取我的第四列..
SELECT count(myTBL.*) as Count from mydb WHERE ColA = '1AB1'
P.S。我想得到一个结合了A和B select语句的select语句。我得到的错误说明了一些关于GROUP BY子句的内容..我很难理解这一点..我希望你能够制定出我可以用于给定示例的正确的select语句。感谢所有的帮助。
答案 0 :(得分:3)
有几种方法可以做到这一点,但是,如果没有明显的主键,分析函数(也就是窗口函数)看起来是个不错的选择。
select cola, colb, colc, cnt as "Count" from (
select
cola,
colb,
colc,
row_number () over (partition by cola order by colb) rn,
count (*) over (partition by cola) cnt
from
table1
where cola = '1AB1'
) as d
where rn = 1
这给出了:
+------------+------------+------------+-------+
| cola | colb | colc | Count |
+------------+------------+------------+-------+
| 1AB1 | CARR | APPL | 2 |
+------------+------------+------------+-------+
答案 1 :(得分:1)
SELECT TOP 1 ColA, ColB, ColC, COUNT(*) OVER (PARTITION BY ColA) AS Count
FROM mydb
WHERE ColA = '1AB1'
SQLFiddle上的演示
答案 2 :(得分:0)
SELECT top 1 cola,colb,colc, (SELECT count(*) from mytbl t2 WHERE t2.ColA = t1.colA)
FROM mytbl t1
WHERE cola = '1AB1'
当您使用子查询时,您无法使用mytbl。*
另一种方式是:
Select t1.*,t2.count
FROM mytbl t1 ,
(SELECT cola,count(*) as "count" from mytbl t2 group by cola) t2
where t1.cola = t2.cola
答案 3 :(得分:0)
下面的查询将对COLA表中的值进行分组和计数,并使用计数链接回ColA上的原始表。
SELECT myTable.ColA , myTable.ColB, myTable.ColC, ColASummary.ColA_Count
FROM myTable
INNER JOIN
(
SELECT ColA, COUNT(ColA) AS ColA_Count
FROM myTable
GROUP By ColA
) AS ColASummary
ON myTable.ColA = ColASummary.ColA
如果其他列需要相同,则可以通过这种方式链接其他汇总表。