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组成,希望对您有所帮助!!