2

次のクエリを書きました

SELECT 
   us.Id as Id, us.Name as Name,
   SUM(CASE WHEN c.isPublish = 0 THEN 1 ELSE 0 END) AS PendingCoupons,
   SUM(CASE WHEN c.isPublish = 1 and convert(date,c.PublishedDate,101) >=  convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ApprovedCouponsToday,
   SUM(CASE WHEN c.isPublish = 0 and convert(date,c. CreateDate, 101) = convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS PendingCouponsToday,
   SUM(CASE WHEN c.isPublish = 1 THEN 1 ELSE 0 END) AS ApprovedCoupons,
   SUM(CASE WHEN c.isPublish = 1 and c.Userid = us.Id and convert(date, c.PublishedDate, 101) >= convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ApprovedByUserToday,
   SUM(CASE WHEN c.isPublish = 1 and c.Userid = us.Id THEN 1 ELSE 0 END) AS ApprovedByUser,
   SUM(CASE WHEN c.ReviewVerify = 1 and convert(date, c.PublishedDate, 101) >= convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ProcessToday,
   COUNT(*) AS Total
FROM 
   Users AS us
LEFT JOIN 
   Coupon c ON Userid = us.Id
GROUP BY 
   us.Name , us.Id

そして、私は次の2つのテーブルを持っています

テーブル

上記のクエリを実行した後、結果は常にこれになります

結果

このクエリにエラーはありますか? 常にカウント "0" が返され、すべてのユーザーにほぼ 100 のクーポンがありますが、表示されません。

4

3 に答える 3

0

RIGHT JOINは機能し、正解(およびおそらく偽のユーザーID)をLEFT JOIN提供しますが、クーポンに関連する結果はまったく提供されないため、クーポンは存在しないユーザーに登録されているように見えます。

LEFT JOINデータがテーブルの左側に存在し、右側に存在する可能性があることを要求しますが、RIGHT JOINその逆も同様です。つまり、データは右端のテーブル(クーポン)に存在し、左側(ユーザー)には接続されていません。

于 2012-10-09T11:50:56.640 に答える
0

RIGHT JOINテーブルからすべてのレコードを取得するには、 a を使用する必要があると思いますCoupon

于 2012-10-09T10:26:27.880 に答える
0

正しい結合を使用していません。ユーザーIDのクーポンを取得したいですか?この結合を使用します。FROM Users AS us LEFT JOIN Coupon c ON us.Id = c.Userid これが機能しない場合は、次を使用します。 FROM Users AS us LEFT OUTER JOIN Coupon c ON us.Id = c.Userid

于 2012-10-09T13:00:44.387 に答える