2

ここでこのエラーメッセージを何度も見ましたが、特定の問題の解決策が得られていません (おそらく私は sql の専門家ではないため)。エラー。

これは私が実行しようとしているクエリです:

SELECT DISTINCT U.FB_UserId
 , U.Id AS GameUserID
 , U.FbLocale
 , U.FbGender
 , U.FbBirthday
 , U.RegistredAt
 , U.LoginCount
 , U.PlayCount
 , U.MarketGroupId

    , (SELECT COUNT(C.PriceFbCredits)
    WHERE UserID = U.Id) AS Payments

    , (SELECT SUM(CASE WHEN C.PriceFbCredits = 13 THEN 1 END)
    WHERE UserID = U.Id) AS P13

    , (SELECT SUM(CASE WHEN C.PriceFbCredits = 52 THEN 1 END)
    WHERE UserID = U.Id) AS P52

    , (SELECT SUM(CASE WHEN C.PriceFbCredits = 130 THEN 1 END)
    WHERE UserID = U.Id) AS P130

FROM [dbo].[User] AS U WITH (NOLOCK) INNER JOIN [dbo].[FbCreditsCallback] AS C WITH (NOLOCK) ON C.UserId = U.Id

もしそうなら、私はエラーメッセージを受け取ります。OK、それが何を意味するかはわかっていますし、何をすべきかはある程度理解していますが、それを行っても、望む結果が得られないと思います... 特定のuserid. 一部のデータは合計する必要があり、一部はカウントする必要があり、結果リストには各 ID が 1 回だけ表示される必要があります。

さて、これが面白いことです(私にとって)。このように内側の SELECT クエリを記述しても、エラーは発生しません。しかし、返されたデータが正しいかどうかはわかりません。

, (SELECT COUNT(PriceFbCredits)
FROM [dbo].[FbCreditsCallback]
WHERE UserID = U.Id) AS Payments

... 正直なところ、私は道に迷いました。助けを求めています。

4

2 に答える 2

0

SQL Server以下に、グループ化を使用して集計関数を作成するときの正しい構文を示します。

yourは、句WHERE UserID = U.Idの一部として作成しているため、まったく必要ありません。INNER JOIN

だからこれを試してください:

SELECT DISTINCT U.FB_UserId
 , U.Id AS GameUserID
 , U.FbLocale
 , U.FbGender
 , U.FbBirthday
 , U.RegistredAt
 , U.LoginCount
 , U.PlayCount
 , U.MarketGroupId
 , COUNT(*)  AS Payments
 , SUM(CASE WHEN C.PriceFbCredits = 13 THEN 1 ELSE 0 END) AS P13
 , SUM(CASE WHEN C.PriceFbCredits = 52 THEN 1 ELSE 0 END) AS P52
 , SUM(CASE WHEN C.PriceFbCredits = 130 THEN 1 ELSE 0 END) AS P130

FROM [dbo].[User] AS U WITH (NOLOCK) 
INNER JOIN [dbo].[FbCreditsCallback] AS C WITH (NOLOCK) ON C.UserId = U.Id
GROUP BY U.FB_UserId
 , U.Id 
 , U.FbLocale
 , U.FbGender
 , U.FbBirthday
 , U.RegistredAt
 , U.LoginCount
 , U.PlayCount
 , U.MarketGroupId

あなたが書いたように

私はSQLの専門家ではありません

今後、WITH(NOLOCK) の使用は避けてください。質問した場合と同じです。SELECT [data] FROM [TABLE] WITH(I really, really don't care if it is accurate or not)

場合によってはそうする理由もありますが、あなたが初心者であれば、SQLそのような状況にあるとは思えません。

于 2013-08-19T09:58:58.810 に答える
0

GROUP BY を使用しない場合、select の整合性との競合が発生します。

たとえば、ある人の場合、それが含まれていない場合は合計またはカウントが必要です(人)の場合、何に対して合計を期待しますか

于 2013-08-19T10:14:41.100 に答える