2017-08-14 10 views
0

SQL ServerでSASコードを再設計しようとしています。 コードには、次の文を含むproc-sqlファイルがあります。SQL ServerのSAS max

sum(case when max(t1,t2) = 0 and transac='D' THEN sales else 0 end)/sum(sales) 

私は以下のようにSQLに変換しようとしましたが、明らかに間違っています。 ここに誰かを憧れて、正しいアプローチを指摘することができます。

sum(case when (select max(Tval) from values(t1,t2) as TVal) = 0 AND transac = 'D' THEN sales else 0)/nullif(sum(sales),0) 

も試してみました:

sum(case when (t1 > t2 AND t1 = 0 OR t2 > t1 AND t2 = 0) AND transac ='D' THEN SALES ELSE 0 END)/nullif(sum(sales),0) 

しかし、このアプローチを使用したSAS結果を複製することができませんでした。

ご協力いただければ幸いです。

おかげで、 B T1とT2である列を想定し

+0

max(t1,t2) 

置き換えていますか? – Simon

+0

ありがとう@サイモンはい、t1とt2は列です – Bee

+0

どこが違うかを示すためにデータを提供することはできますか? – LAS

答えて

0

...

あなたは、私がこのような何かが働くかもしれないと思う...しかし、私は思うCTE

WITH CTE1 
AS 
(SELECT MAX(t1), MAX(t2) 
FROM fooTable), 

CTE2 
AS 
(SELECT 
CASE WHEN 
SUM(t1 + t2) = 0 AND MAX(fooTable.transac) = 'D' THEN sales 
ELSE 0 
END AS fooColumn 
FROM CTE1, fooTable) 

SELECT SUM(fooColumn)/SUM(table.sales) 
FROM CTE2, table 

を使用することができますMAX(fooTable.transac)も何かを混乱させるかもしれません。あなたは、あなたが作業しているものの小さなサンプルデータを提供することができますか?

0

SQLサーバーに、SASのMAX(、)機能またはTeradataのLARGEST(、)機能と類似の機能があるかどうかを確認できます。

そうでなければ、CASE文でシミュレートしてください。 T1、T2の列は

case when (t1>t2) then t1 else t2 end 
関連する問題