我正在尝试使用MSSQL做一些我认为可能(很容易)的事情,但我不知道如何发出正确的搜索字符串。我有以下情况。
Table A
UID | Value....
1 | a
2 | b
3 | c
Table B
PartTypes_uid_fk | Value....
1 | a
1 | b
1 | c
1 | d
1 | e
3 | 67
3 | 1354
我试图获得以下结果,查询表A以获取所有结果{TableA。*}并在同一行结果中显示表b引用的数量{count TableB.tableA_fk} 到目前为止我所拥有的是以下内容。
SELECT DISTINCT t1.uid, CONVERT(varchar(MAX), t1.Name) AS Name, CONVERT(varchar(MAX), t1.Description) AS Description,
Count(t2.Items_uid_fk) OVER (Partition By t2.PartTypes_uid_fk) as Count
FROM [Table1] as t1 left outer join Table2 as t2 on t2.PartTypes_uid_fk=t1.uid;
这适用于表B中具有相关记录的所有表A记录,但如果表B中有0个条目则不起作用。由于varchars是ntext格式并且它是不同的,因此需要转换varchars。
提前感谢您的帮助。 斯蒂芬
答案 0 :(得分:1)
您可能希望预先聚合B表和LEFT JOIN,而不是遇到GROUP BY on N/TEXT
列的问题,并且运行得更快。
select t1.*, ISNULL(t2.c, 0) AS CountOfB
from table1 t1
left join
(
select parttypes_uid_fk, count(*) c
from table2
group by parttypes_uid_fk
) t2 on t2.PartTypes_uid_fk=t1.uid
答案 1 :(得分:0)
比这更容易:
SELECT t1.uid, t1.Name, COUNT(*)
FROM [Table1] t1
LEFT JOIN [Table2] t2 ON t2.PartTypes_uid_fk = t1.uid
GROUP BY t1.uid, t1.Name