[SQL] 어떻게 내가 어디 절에 별칭을 사용합니까? [복제]
SQL어떻게 내가 어디 절에 별칭을 사용합니까? [복제]
SELECT
Trade.TradeId,
Isnull(Securities.SecurityType,'Other') SecurityType,
TableName,
CASE
WHEN
SecurityTrade.SecurityId IS NOT NULL
THEN
SecurityTrade.SecurityId
ELSE
Trade.SecurityId
END AS PricingSecurityID,
sum(Trade.Quantity)OVER(Partition by Securities.SecurityType, SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity,
--added porfolio id for Getsumofqantity
Trade.PortfolioId,
Trade.Price,
case
when (Buy = 1 and Long = 1) then 1
when (Buy = 0 and Long = 0) then 1
else 0
end Position
from
Fireball_Reporting..Trade
where porfolioid =5 and Position =1
난 경우의 별칭 내 where 절에 위치 = 1을 사용하려면
case
when (Buy = 1 and Long = 1) then 1
when (Buy = 0 and Long = 0) then 1
else 0
end Position
어떻게 내가이 곳 절에서 사용할 수 있습니까?
내가 직접 where 절에서 그 CASE 문을 사용했지만 실패 시도 저를 도와주세요
WHERE Trade.SecurityId = @SecurityId AND PortfolioId = @GHPortfolioID AND
(case when (Buy = 1 and Long = 1) then 1 when (Buy = 0 and Long = 0) then 1 else 0 end Position = 1)
해결법
-
==============================
1.는 SQL - 서버 문서는 말합니다 :
는 SQL - 서버 문서는 말합니다 :
MySQL의 문서에 비슷한는 말합니다 :
MySQL의에서 당신은 수있는 SELECT 절에 이상 재사용 별칭에서
-
==============================
2.당신은 직접적으로, 할 수 없습니다.
당신은 직접적으로, 할 수 없습니다.
당신이 하위 쿼리에서 전체 쿼리를 포장하는 경우, 그러나, 그것을 잘 작동합니다.
SELECT * FROM ( SELECT Trade.TradeId, Isnull(Securities.SecurityType,'Other') SecurityType, TableName, CASE WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId ELSE Trade.SecurityId END AS PricingSecurityID, sum(Trade.Quantity)OVER(Partition by Securities.SecurityType, SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity, --added porfolio id for Getsumofqantity Trade.PortfolioId, Trade.Price, case when (Buy = 1 and Long = 1) then 1 when (Buy = 0 and Long = 0) then 1 else 0 end Position from Fireball_Reporting..Trade where porfolioid = 5 ) AS data WHERE Position = 1
당신이 WHERE 절에 CASE 문을 반복 할 필요가 없습니다 것을이 의미합니다. (유지 보수성 및 DRY).
그것은 또한 당신이 단순히 WHERE 절에 자신을 반복 것처럼 옵티마이 행동 할 수있는 구조입니다.
또한 다른 RDBMS에 매우 휴대용입니다.
SQL Server에서 당신은 또한 다른 옵션을 가지고 ...
SELECT Trade.TradeId, Isnull(Securities.SecurityType,'Other') SecurityType, TableName, CASE WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId ELSE Trade.SecurityId END AS PricingSecurityID, sum(Trade.Quantity)OVER(Partition by Securities.SecurityType, SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity, --added porfolio id for Getsumofqantity Trade.PortfolioId, Trade.Price, position.val AS Position from Fireball_Reporting..Trade CROSS APPLY ( SELECT case when (Buy = 1 and Long = 1) then 1 when (Buy = 0 and Long = 0) then 1 else 0 end AS val ) AS position where porfolioid = 5 AND position.val = 1
-
==============================
3.직접이 작업을 수행 할 수 있습니다 ...하지만 당신은 모든 주위에 추가 선택을 감싸고 where 절을 사용할 수 있습니다 :
직접이 작업을 수행 할 수 있습니다 ...하지만 당신은 모든 주위에 추가 선택을 감싸고 where 절을 사용할 수 있습니다 :
select * from ( SELECT Trade.TradeId, Isnull(Securities.SecurityType,'Other') SecurityType, TableName, CASE WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId ELSE Trade.SecurityId END AS PricingSecurityID, sum(Trade.Quantity)OVER(Partition by Securities.SecurityType, SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity, --added porfolio id for Getsumofqantity Trade.PortfolioId, Trade.Price, case when (Buy = 1 and Long = 1) then 1 when (Buy = 0 and Long = 0) then 1 else 0 end Position from Fireball_Reporting..Trade where porfolioid =5 and Position =1 )x where x.position = 1
-
==============================
4.아마 뭔가를보고 싶어하지만, 확실히이 그것을 다룰 것입니다 :
아마 뭔가를보고 싶어하지만, 확실히이 그것을 다룰 것입니다 :
WHERE (주문 = 1, 긴 = 1) 또는 (판매 = 0 롱 = 0)
from https://stackoverflow.com/questions/13031013/how-do-i-use-alias-in-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 일정에 대한 MySQL의 질문 (0) | 2020.07.16 |
---|---|
[SQL] 저자에 의해 표현 엔진 SQL 쿼리 항목 목록 (0) | 2020.07.16 |
[SQL] 외래 키 열은 여러 개의 기본 키에 매핑 (0) | 2020.07.15 |
[SQL] 중복 레코드를 삭제 (0) | 2020.07.15 |
[SQL] 어떻게 콤보 <모두 선택>에 대한 기능을 추가하려면 Microsoft Access 폼에서 (0) | 2020.07.15 |