1

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

次の結果を取得しようとしています。すべての結果 {TableA.*} に対してテーブル A をクエリし、同じ行の結果にテーブル 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 にエントリがない場合は機能しません。varchar は ntext 形式であり、異なるため、varchar の変換が必要でした。

事前にご協力いただきありがとうございます。スティーブン

4

3 に答える 3

1

列で問題が発生する代わりに、GROUP BY on N/TEXTより高速に実行するには、B テーブルを事前に集計し、A に対して LEFT JOIN することをお勧めします。

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
于 2012-11-08T19:38:44.297 に答える
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
于 2012-11-08T19:37:44.797 に答える
0

あなたのクエリは

SELECT t1.uid, 
CONVERT(varchar(MAX), t1.Name) AS Name, 
CONVERT(varchar(MAX), t1.Description) AS Description, 
Count(t2.Items_uid_fk) CountItems 
FROM [Table1] as t1 left outer join Table2 as t2 on t1.uid = t2.PartTypes_uid_fk
GROUP BY uid, t1.name, t1.Description;
于 2012-11-08T19:38:14.813 に答える