Sql 从多个表中选择
表B、表c 表A的ID为col1Sql 从多个表中选择,sql,sql-server,sql-server-2008,select,Sql,Sql Server,Sql Server 2008,Select,表B、表c 表A的ID为col1 ID COL1 1 abc 2 bcd 表B中有col2、col3 col2 col3 bcc abc acc bcd 表C具有ID col4 ID col3 1 qwe 1 tre 1 uid 2 jkj 2 jwekj 现在,我需要选择ID,COL1,COL2,count(表C中的ID)。示例输出将是 ID COL1 COL2 CNT 1 abc bcc 3 2 bcd ac
ID COL1
1 abc
2 bcd
表B中有col2、col3
col2 col3
bcc abc
acc bcd
表C具有ID col4
ID col3
1 qwe
1 tre
1 uid
2 jkj
2 jwekj
现在,我需要选择ID,COL1,COL2,count(表C中的ID)。示例输出将是
ID COL1 COL2 CNT
1 abc bcc 3
2 bcd acc 2
谁能帮我一下吗?表A和表B使用COl1和COL3连接。为什么不按ID连接表A和表C并获取计数
select a.id
, max(a.col1)
, avg(b.col2)
, count(distinct c.ID)
from TableA a
join TableA b
on a.col1 = b.col3
left join
TableC c
on c.id = a.id
group by
a.id
SELECT TableA.ID, TableA.COL1, TableB.COL2, COUNT(TableC.*)
FROM TableA
INNER JOIN TableB ON TableB.COL3 = TableA.COL1
INNER JOIN TableC ON TableC.ID = TableA.ID
GROUP BY TableA.ID, TableA.COL1, TableB.COL2
ORDER BY TableA.ID, TableA.COL1, TableB.Col2
也许是这样的:
SELECT
TableA.COL1,
TableB.col2,
(
SELECT
COUNT(*)
FROM
TableC
WHERE
TableC.ID=TableA.ID
)
FROM
TableA
JOIN TableB
ON TableA.COL1=TableB.col3
您使用的是哪个版本的sql server?我们只能通过在id列上分组来获取吗?请看@Arion的回答表a中的所有id不需要出现在表C中。因此,我需要从表中获取所有值。如果该ID不在表C中,则该计数应为0。只有我在这里找不到它。我试着用左外接。但仅按ID分组会让我很不舒服。编辑后,它只按ID分组,但这意味着您必须将其他列放入聚合函数中,如min、max或avg
SELECT
TableA.COL1,
TableB.col2,
(
SELECT
COUNT(*)
FROM
TableC
WHERE
TableC.ID=TableA.ID
)
FROM
TableA
JOIN TableB
ON TableA.COL1=TableB.col3
Select
a.Id, a.col1, b.col2, count(c.*) As Cnt
From A as a
Inner Join B as b on a.col1 = b.col3
Inner Join C as c on a.Id = c.Id
Group By a.Id, a.col1, b.col2
declare @A table(ID int, col1 varchar(50))
declare @B table(col2 varchar(50), col3 varchar(50))
declare @C table(ID int, col4 varchar(50))
INSERT INTO @A(ID, col1) values(1, 'abc')
INSERT INTO @A(ID, col1) values(2, 'bcd')
INSERT INTO @B(col2, col3) values('bcc' , 'abc')
INSERT INTO @B(col2, col3) values('acc' , 'bcd')
INSERT INTO @C(ID, col4) values('1' , 'qwe')
INSERT INTO @C(ID, col4) values('1' , 'tre')
INSERT INTO @C(ID, col4) values('1' , 'uid')
INSERT INTO @C(ID, col4) values('2' , 'jkj')
INSERT INTO @C(ID, col4) values('2' , 'jwekj')
-- The query
SELECT a.ID, a.col1, b.col2, (SELECT COUNT(c.ID) FROM @C c WHERE c.ID = a.ID) CNT
FROM @A a join @b b ON a.col1 = b.col3
select A.iD, A.Col1,B.col2,
(select count(*) from tableC C where C.id=A.ID) as cnt
from tableA A join tableB B on A.col1=b.col3
select A.ID, A.Col1, B.Col2, Count(*) AS Cnt
from A
inner join B ON B.Col3 = A.Col1
left join C ON C.ID = A.ID
Group By A.ID, A.Col1, B.Col2