0

where句に集計を入れることができないため、以下のクエリを実行していますが、サブクエリにあることを考えると、ここから先に進むための最善の方法が完全にはわかりません...!

動作しない行は次のとおりです。

        (select gradeid from commissionconsultants where UserId = ic.primaryconsultantid) 
        and starters = COUNT(*) ) from InvoiceCommissions ic

そして、完全なクエリは次のとおりです。

select u.username + ' ' + u.surname as UserName, 
ic.primaryconsultantid, 
COUNT(ic.invoiceid) as starters, 
DATENAME(mm,ic.invoiceissueddate) AS [month], 
DATEPART(yy,ic.invoiceissueddate) as [year], 
cast(SUM((ic.value / ic.exchangerate) * (ic.primaryconsultantperc / 100)) as numeric(8,2)) AS totalvalue, 
(select threshold from commissiongrades where gradeid = 
    (select gradeid from commissionconsultants where UserId = ic.primaryconsultantid) ) AS Threshold, 
(select percentage from commissiongradevalues where gradeid = 
    (select gradeid from commissionconsultants where UserId = ic.primaryconsultantid) 
        and starters = COUNT(*) ) from InvoiceCommissions ic
inner join commissionconsultants cc on cc.userid = ic.primaryconsultantid
inner join Users u on u.UserId = ic.primaryconsultantid
group by primaryconsultantid, DATENAME(mm,invoiceissueddate), DATEPART(yy,invoiceissueddate), u.username + ' ' + u.surname 

本質的に、私がやろうとしているのは、コンサルタントのグレード(コミッションコンサルタントにあります)と特定の月に行われた配置の数に基づいて、テーブル(コミッショングレード値)からコミッションのパーセンテージを検索することです。

たとえば、コンサルタントが1か月に1回のプレースメントを行った場合、そのコミッションの割合はXXになり、1か月に2回のプレースメントを行った場合、YYのコミッションの割合になります。

何か案は?

4

3 に答える 3

1

これがあなたがやろうとしていることについての私の最善の推測です。

WITH ic AS
(
SELECT ic.primaryconsultantid
     , COUNT(ic.invoiceid) as starters
     , DATENAME(mm,ic.invoiceissueddate) AS [month]
     , DATEPART(yy,ic.invoiceissueddate) as [year]
     , CAST(SUM((ic.value / ic.exchangerate) * (ic.primaryconsultantperc / 100)) as numeric(8,2)) AS totalvalue
  FROM InvoiceCommissions ic
 GROUP BY primaryconsultantid
     , DATENAME(mm,invoiceissueddate)
     , DATEPART(yy,invoiceissueddate)
)    
SELECT u.username + ' ' + u.surname AS UserName
     , ic.primaryconsultantid
     , ic.starters
     , ic.month
     , ic.year
     , ic.totalvalue
     , cg.threshold 
     , cgv.percentage 
  FROM ic
 INNER JOIN Users u 
    ON u.UserId = ic.primaryconsultantid
 INNER JOIN commissionconsultants cc
    ON cc.UserId = ic.primaryconsultantid
  LEFT OUTER commissiongrades cg
    ON cg.gradeid = cc.gradeid
  LEFT OUTER commissiongradevalues cgv
    ON cgv.gradeid = cc.gradeid
   AND cgv.starters = ic.starters

しかし、あなたの質問には私が得られない気まぐれがあります。

  1. なぜしきい値とパーセンテージをSELECTに入れたのですか?成績IDが欠落していると予想されますか?そうでない場合は、をに変更LEFT OUTERINNERます。
  2. すでに持っているのに、なぜコミッションを取得する必要があるのic.primaryconsultantpercですか?これは偶発的な手数料ですか?もしそうなら、なぜそれが追加されないのtotalvalueですか?

とにかく、楽しんでください!

于 2012-10-31T03:06:16.777 に答える
0

置換COUNT(*)

(select count(*) from commissionconsultants)
于 2012-10-30T16:57:01.150 に答える
0

グループ化を行ってからすべての結合を行う場合は、メインのサブクエリを1つだけ使用することをお勧めします。テストデータなしでクエリを書くのは難しいです。
とにかく、私が見る限り、2つのサブクエリを使用していてcommissionconsultants、実際にはこのテーブルで1つの結合のみが必要です。

select
    ic.UserName, 
    ic.primaryconsultantid, 
    ic.starters, 
    ic.[month],
    ic.[year],
    ic.totalvalue,
    cg.threshold as Threshold, 
    cgv.percentage as Percentage
from
(
    select
        u.username + ' ' + u.surname as UserName, 
        tt.primaryconsultantid, 
        count(tt.invoiceid) as starters,
        datename(mm, tt.invoiceissueddate) as [month], 
        datepartT(yy, tt.invoiceissueddate) as [year],
        cast(sum((tt.value / tt.exchangerate) * (tt.primaryconsultantperc / 100)) as numeric(8,2)) as totalvalue,
    from InvoiceCommissions as tt
        inner join Users as u on u.userid = tt.primaryconsultantid
    group by
        tt.primaryconsultantid, 
        datename(mm, tt.invoiceissueddate), datepart(yy, tt.invoiceissueddate),
        u.username + ' ' + u.surname
) as ic
    inner join commissionconsultants as cc on cc.userid = ic.primaryconsultantid
    inner join commissiongrades as cg on cg.gradeid = cc.gradeid
    inner join commissiongradevalues as cgv on cgv.gradeid = cc.gradeid and cgv.starters = ic.starters
于 2012-10-30T17:08:00.340 に答える