添加包含基于'where'的数据计数的COLUMN

时间:2012-12-21 08:43:59

标签: sql sql-server-2008

我想知道查询,我可以在哪里获得正常的列集,并添加一个包含数据库中记录数的列。

例如,假设我有这些数据..

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语句。感谢所有的帮助。

4 个答案:

答案 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)

如果你只想要ColA的数量

,我会做这样的事情
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

如果其他列需要相同,则可以通过这种方式链接其他汇总表。