Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 添加包含基于“where”的数据计数的列_Sql_Sql Server 2008 - Fatal编程技术网

Sql 添加包含基于“where”的数据计数的列

Sql 添加包含基于“where”的数据计数的列,sql,sql-server-2008,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语

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

例如,假设我有这些数据

ColA   ColB   ColC
----   ----   ----
1AB1   CARR   APPL
2BC1   APPL   APPL
1AB1   MAXR   APPL
根据这些行,我想生成这些列

ColA   ColB   ColC   Count
----   ----   ----   -----
1AB1   CARR   APPL     2
这是我目前的select语句

SELECT top 1 myTBL.* from mydb WHERE ColA = '1AB1'
但是我似乎无法添加以下代码来获得我的第四列

SELECT count(myTBL.*) as Count from mydb WHERE ColA = '1AB1'

另外,我想得到一个select语句,它结合了我的a和B select语句。我得到的错误说明了关于GROUPBY子句的一些内容。。我很难理解这一点。。我希望您能制定出正确的select语句,我可以将其用于给定的示例。。谢谢你的帮助。

如果你只想数可乐,我会这样做的

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

如果你只想数可乐,我会这样做

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

有几种方法可以做到这一点,但是,如果没有明显的主键,分析函数(又称窗口函数)看起来是个不错的选择

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 |
+------------+------------+------------+-------+

有几种方法可以做到这一点,但是,如果没有明显的主键,分析函数(又称窗口函数)看起来是个不错的选择

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 |
+------------+------------+------------+-------+

下面的查询将对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

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

下面的查询将对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
SELECT TOP 1 ColA, ColB, ColC, COUNT(*) OVER (PARTITION BY ColA) AS Count
FROM mydb
WHERE ColA = '1AB1'
如果其他列需要相同的数据,则可以通过这种方式链接其他汇总表

SELECT TOP 1 ColA, ColB, ColC, COUNT(*) OVER (PARTITION BY ColA) AS Count
FROM mydb
WHERE ColA = '1AB1'
演示


演示

从mydb中选择ColA,ColB,ColC,countColA count ColA count ColA,其中ColA='1AB1'组由ColA,ColB,ColC组成,希望对您有所帮助!!从mydb中选择ColA,ColB,ColC,countColA count ColA count,其中ColA='1AB1'组由ColA,ColB,ColC组成,希望对您有所帮助!!