0

こんにちは、私は以下の作業クエリ(mssql)を持っています

select 
max(load_number) load_number,max(linediscount) maxlinediscount,max(CustomerBand) customer_band

  from [Linked_Order_lines] 
  join [Customer_Order_Summary]
  on [Customer_Order_Summary].[CustomerOrderID]=[Linked_Order_lines].[load_number]
  join [Customers]
  on Customers.CustomerName=Customer_Order_Summary.CustomerName
  join Customer_Order_lines
  on Customer_Order_Summary.CustomerOrderID=Customer_Order_lines.CustomerOrderID
  join price_escalation_bands
  on price_escalation_bands.band=Customer_Order_Summary.CustomerBand

  where [linked_order_id] in 
  (
    select [linkedorderid] from 
    [Linked_Order_Summary] join [Linked_Order_lines] on
    [Linked_Order_Summary].[linkedorderid] = [Linked_Order_lines].[linked_order_id]
    where [load_number]='7'
  ) 
  and Customer_Order_lines.linestatus='current'

    group by load_number

これにより、結果が生成されます

ここに画像の説明を入力

このクエリでは、price_escalation_bands次のようなテーブルに既に参加しています。

ここに画像の説明を入力

私がやりたいことは、maxlinediscount私のクエリをdiscountテーブルの列と比較しprice_escalation_bands、次に大きいテーブルのレコードのユーザー ID (fk_salesman_userid) を返すことです。したがって、11 の割引は割引 15 になり、fk_salesman_userid9 が返されます。割引が 18 の場合、100 になり、fk_salesman_userid21 が返されます。

私は基本的にfk_salesman_userid割引を承認できる人を見つけようとしていますmaxlinediscount

したがって、望ましい出力は次のようになります。

ここに画像の説明を入力

case ステートメントが必要ですか? その場合、既存の select ステートメントの max ステートメントでどのように使用すればよいですか?

アウェイとして事前に感謝します

4

2 に答える 2

1

price_escalation_bands に参加している間、割引のためにもう 1 つの条件を使用できます。FIDDLEを確認してください。ここでは、結果を一時テーブルで試しました。join price_escalation_bandsを渡すことで、同じサブクエリを試すことができますmax(linediscount)。これがあなたを助けることを願っています。

于 2013-06-18T13:43:41.517 に答える
0

最終作業構文:

IF OBJECT_ID('tempdb..#linkloads') IS NOT NULL
BEGIN
DROP TABLE #linkloads
END

CREATE TABLE #linkloads
(
maxlinediscount [decimal](10,3),
customer_band [varchar](50),
load_number [int],
totalcost [decimal](10,3),
period [datetime],
CreditLimit[decimal](10,3),
CurrentBalance[decimal](10,3),
CustomerName [varchar](100),
TotalCubes[decimal](10,3),
TreatedCubes[decimal](10,3),
NormalCubes[decimal](10,3),
PricingIssue[bit]
);



insert into #linkloads

select max(linediscount) maxlinediscount,max(CustomerBand) customer_band,max(load_number) load_number,max(totalcost) totalcost,max(Customer_Order_Summary.PeriodStart) period,max(Customers.CreditLimit) CreditLimit ,max(Customers.CurrentBalance)CurrentBalance,max(Customer_Order_Summary.CustomerName)CustomerName,max(TotalCubes) TotalCubes,max(TreatedCubes)TreatedCubes ,max(TotalCubes-TreatedCubes) as NormalCubes,sum(case when pricingissue=1 THEN 1 ELSE 0 END) pricingissue

  from [Linked_Order_lines] 
  join [Customer_Order_Summary]
  on [Customer_Order_Summary].[CustomerOrderID]=[Linked_Order_lines].[load_number]
  join [Customers]
  on Customers.CustomerName=Customer_Order_Summary.CustomerName
  join Customer_Order_lines
  on Customer_Order_Summary.CustomerOrderID=Customer_Order_lines.CustomerOrderID
   where [linked_order_id] in 
  (
    select [linkedorderid] from 
    [Linked_Order_Summary] join [Linked_Order_lines] on
    [Linked_Order_Summary].[linkedorderid] = [Linked_Order_lines].[linked_order_id]
    where [load_number]='10'
  ) 
  and Customer_Order_lines.linestatus='current'
     group by load_number;

select * from #linkloads;

select load_number,maxlinediscount,customer_band,[Salesman_Discounts_per_band].fk_salesman_userid,totalcost,period,creditlimit,currentbalance,customername,totalcubes,treatedcubes,normalcubes,pricingissue from #linkloads
left outer JOIN [Salesman_Discounts_per_band] on [Salesman_Discounts_per_band].band=#linkloads.customer_band
AND [Salesman_Discounts_per_band].[discount_allowed] = (
  SELECT top 1 [Salesman_Discounts_per_band].[discount_allowed]
  FROM [Salesman_Discounts_per_band]
  WHERE [Salesman_Discounts_per_band].band=#linkloads.customer_band
  AND [Salesman_Discounts_per_band].[discount_allowed]<=#linkloads.maxlinediscount
  ORDER BY [Salesman_Discounts_per_band].[discount_allowed]
)
;
于 2013-06-19T12:45:54.123 に答える