[SQL] 어떻게 MS-SQL 서버의 별칭 열에 의해 그룹을 수행합니까?
SQL어떻게 MS-SQL 서버의 별칭 열에 의해 그룹을 수행합니까?
I (예 : 아래) 앨리어스 열 작용에 의해 그룹을 수행하기 위해 노력하고있어하지만 올바른 구문을 확인할 수 없습니다.
SELECT LastName + ', ' + FirstName AS 'FullName'
FROM customers
GROUP BY 'FullName'
올바른 구문은 무엇인가?
편집하다
더 질문을 확장 솔루션이 여전히 CASEed 별칭 컬럼에 적용된다 (나는 내가받은 대답을 기대하지 않았다)?
SELECT
CASE
WHEN LastName IS NULL THEN FirstName
WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
END AS 'FullName'
FROM customers
GROUP BY
LastName, FirstName
그리고 그 대답은 여전히 적용 되는가입니다.
해결법
-
==============================
1.당신은 별명보다는 의해 그룹에 원하는 표현을 통과
당신은 별명보다는 의해 그룹에 원하는 표현을 통과
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY LastName + ', ' + FirstName
-
==============================
2.이것이 제가하는 것입니다.
이것이 제가하는 것입니다.
SELECT FullName FROM ( SELECT LastName + ', ' + FirstName AS FullName FROM customers ) as sub GROUP BY FullName
이 기술은 당신의 "편집"시나리오에 간단하게 적용
SELECT FullName FROM ( SELECT CASE WHEN LastName IS NULL THEN FirstName WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName END AS FullName FROM customers ) as sub GROUP BY FullName
-
==============================
3.불행하게도 당신이 문에 의해 그룹에 별칭을 참조 할 수 없습니다, 당신은이 보인다 놀라운, 다시 로직을 작성해야합니다.
불행하게도 당신이 문에 의해 그룹에 별칭을 참조 할 수 없습니다, 당신은이 보인다 놀라운, 다시 로직을 작성해야합니다.
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY LastName + ', ' + FirstName
다른 방법으로는, 부속 선택 또는 공통 테이블 식으로 선택을 넣을 수있는 한 후 수 열 이름에 그룹 (더 이상 별칭.)
-
==============================
4.죄송합니다, 현재는 MS SQL 서버 (PostgreSQL을에 가능하지만)와 수 없습니다 :
죄송합니다, 현재는 MS SQL 서버 (PostgreSQL을에 가능하지만)와 수 없습니다 :
select lastname + ', ' + firstname as fullname from person group by fullname
그렇지 않으면 그냥이를 사용 :
select x.fullname from ( select lastname + ', ' + firstname as fullname from person ) as x group by x.fullname
아니면 이거:
select lastname + ', ' + firstname as fullname from person group by lastname, firstname -- no need to put the ', '
위의 쿼리 그룹이 필드 첫째, 다음 해당 필드를 계산, 빠릅니다.
다음 쿼리 느리다 (그것이 그룹 그 연산에 기초하여 기록을 한 후, 먼저 선택 식을 계산하려고).
select lastname + ', ' + firstname as fullname from person group by lastname + ', ' + firstname
-
==============================
5.귀하의 편집 문제 설명을 감안할 때, 내가 유착을 사용하는 것이 좋습니다 것 () 대신에 다루기 힘든 CASE 식의 :
귀하의 편집 문제 설명을 감안할 때, 내가 유착을 사용하는 것이 좋습니다 것 () 대신에 다루기 힘든 CASE 식의 :
SELECT FullName FROM ( SELECT COALESCE(LastName+', '+FirstName, FirstName) AS FullName FROM customers ) c GROUP BY FullName;
-
==============================
6.내 생각 엔입니다 :
내 생각 엔입니다 :
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY LastName + ', ' + FirstName
오라클은 성가신 유사한 제한을 가지고 있습니다. 더 나은 솔루션이 존재하는지 궁금 해요.
질문의 두 번째 절반에 대답하기 위해, 이러한 제한은 귀하의 경우 문뿐만 아니라 더 복잡한 식에 적용됩니다. 나는 그것이 사용하는 본 최고의 제안 복잡한 식의 이름을 서브-선택합니다.
-
==============================
7.당신은 너무 같은 별칭을 만들고 GROUP BY 절에서 사용하는 CROSS을 적용 할 수 있습니다 :
당신은 너무 같은 별칭을 만들고 GROUP BY 절에서 사용하는 CROSS을 적용 할 수 있습니다 :
SELECT FullName FROM Customers CROSS APPLY (SELECT LastName + ', ' + FirstName AS FullName) Alias GROUP BY FullName
-
==============================
8.
SELECT CASE WHEN LastName IS NULL THEN FirstName WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName END AS 'FullName' FROM customers GROUP BY LastName, FirstName
사용하는 식 (경우 문) 두 개의 서로 다른 입력에 대해 같은 대답을주지 않을 수 있기 때문 작동합니다.
이것은 당신이 같은 것을 사용하는 경우이 아니다 :
LEFT(FirstName, 1) + ' ' + LastName
이러한 경우 "제임스 테일러 '와'존 테일러" "J 테일러"모두 결과는 것.
당신은 두 번 "J 테일러"(사람마다 하나)가 당신의 출력을 원하는 경우 :
GROUP BY LastName, FirstName
그러나, 당신은 "J 테일러 '의 한 행을 원한다면 당신이 원하는 것 :
GROUP BY LastName, LEFT(FirstName, 1)
-
==============================
9.두 번 쿼리에있는 경우 문의 혼란을 피하려면 사용자 정의 - 기능에 배치 할 수 있습니다.
두 번 쿼리에있는 경우 문의 혼란을 피하려면 사용자 정의 - 기능에 배치 할 수 있습니다.
열 별칭을 사용할 수없는, 그래서 미안하지만, SQL Server는 Group By 절하기 전에 데이터 집합을 렌더링하지 않을 것입니다. 당신은 주문에 사용할 수 있습니다.
-
==============================
10.당신이 뭔가를 쓸 수 이전 FoxPro에에서 (버전 2.5 이후 나는 그것을 사용하지 않은) :
당신이 뭔가를 쓸 수 이전 FoxPro에에서 (버전 2.5 이후 나는 그것을 사용하지 않은) :
SELECT LastName + ', ' + FirstName AS 'FullName', Birthday, Title FROM customers GROUP BY 1,3,2
난 정말 그 구문을 좋아했다. 왜 다른 곳에서는 실행되지 않는 이유는 무엇입니까? 그것은 좋은 바로 가기, 그러나 나는 다른 문제가 발생 같은데요?
-
==============================
11.
SELECT CASE WHEN LastName IS NULL THEN FirstName WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName END AS 'FullName' FROM customers GROUP BY 1`
-
==============================
12.다음과 같은 문제로 자신을 발견 누군가를 위해 (제로를 보장하고 널 (null) 값이 동등하게 취급하여 그룹화) ...
다음과 같은 문제로 자신을 발견 누군가를 위해 (제로를 보장하고 널 (null) 값이 동등하게 취급하여 그룹화) ...
SELECT AccountNumber, Amount AS MyAlias FROM Transactions GROUP BY AccountNumber, ISNULL(Amount, 0)
(즉, SQL Server는 당신의 그룹 또는 집계 함수에 필드 금액을 포함하지 않았 음을 불평)
... 당신의 선택에 동일한 기능을 배치 기억 ...
SELECT AccountNumber, ISNULL(Amount, 0) AS MyAlias FROM Transactions GROUP BY AccountNumber, ISNULL(Amount, 0)
from https://stackoverflow.com/questions/497241/how-do-i-perform-a-group-by-on-an-aliased-column-in-ms-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 스파크 DataFrame의 GROUPBY를 사용할 때 어떻게 다른 열을 얻으려면? (0) | 2020.05.01 |
---|---|
[SQL] 는 "파티 모델"의 장점은 무엇 뒤에 원칙은, 그리고? (0) | 2020.04.30 |
[SQL] SQL 서버 2008 - IF는 NOT INSERT ELSE UPDATE 존재 (0) | 2020.04.30 |
[SQL] MyBatis로 일괄 삽입 / 업데이트 오라클 (0) | 2020.04.30 |
[SQL] MySQL의에서 다음 사용 가능한 ID를 찾기 (0) | 2020.04.30 |