SQL Server의 에일리어스 컬럼에서 GROUP BY를 실행하려면 어떻게 해야 합니까?
앨리어스된 열(아래 예)에서 작업을 통해 그룹을 수행하려고 하지만 올바른 구문을 확인할 수 없습니다.
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
그리고 대답은 여전히 적용된다는 것입니다.
에일리어스가 아닌 그룹화할 식을 전달합니다.
SELECT LastName + ', ' + FirstName AS 'FullName'
FROM customers
GROUP BY LastName + ', ' + FirstName
이게 내가 하는 일이야.
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
유감스럽게도 GROUP BY 스테이트먼트에서 가명을 참조할 수 없습니다.놀라운 것처럼 보이는 논리를 다시 써야 합니다.
SELECT LastName + ', ' + FirstName AS 'FullName'
FROM customers
GROUP BY LastName + ', ' + FirstName
또는 선택 항목을 하위 선택 식 또는 일반 테이블 식에 넣을 수 있습니다. 그 후 열 이름을 그룹화할 수 있습니다(에일리어스는 더 이상 사용할 수 없습니다).
죄송합니다. MS SQL Server에서는 불가능합니다(Postgre에서는 가능).SQL):
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
당신이 편집한 문제 설명에 따르면COALESCE() 어려운 CASE§:
SELECT FullName
FROM (
SELECT COALESCE(LastName+', '+FirstName, FirstName) AS FullName
FROM customers
) c
GROUP BY FullName;
내 추측은:
SELECT LastName + ', ' + FirstName AS 'FullName'
FROM customers
GROUP BY LastName + ', ' + FirstName
Oracle에도 비슷한 제한이 있어 짜증납니다.더 좋은 해결책이 있는지 궁금합니다.
질문의 후반부에 답하기 위해, 이 제한은 케이스 스테이트먼트와 같은 보다 복잡한 표현에도 적용됩니다.서브셀렉트를 사용하여 복잡한 식에 이름을 붙이는 것이 지금까지 본 제안 중 가장 좋습니다.
하시면 됩니다.CROSS APPLY하여 에일리어스를 합니다.GROUP BY절을 붙입니다
SELECT FullName
FROM Customers
CROSS APPLY (SELECT LastName + ', ' + FirstName AS FullName) Alias
GROUP BY FullName
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
사용하는 수식(CASE 문)에서는, 2개의 다른 입력에 대해서 같은 답을 얻을 수 없기 때문에, 이것은 유효합니다.
이것은 다음과 같은 것을 사용한 경우에는 해당되지 않습니다.
LEFT(FirstName, 1) + ' ' + LastName
이러한 경우 "제임스 테일러"와 "존 테일러"는 둘 다 "J 테일러"가 된다.
출력에 "J Taylor"를 두 번 사용하는 경우(각 개인당 1개씩)
GROUP BY LastName, FirstName
그러나 "J Taylor" 한 줄만 원하는 경우:
GROUP BY LastName, LEFT(FirstName, 1)
문의에 케이스 스테이트먼트가 두 번 혼재하는 것을 방지하려면 사용자 정의 함수에 넣을 수 있습니다.
죄송합니다. SQL Server는 그룹화 기준 절 앞에 데이터 집합을 렌더링하지 않으므로 열 별칭을 사용할 수 없습니다.Order By에서 사용할 수 있습니다.
이전 FoxPro(버전 2.5 이후 사용하지 않음)에서는 다음과 같이 쓸 수 있습니다.
SELECT LastName + ', ' + FirstName AS 'FullName', Birthday, Title
FROM customers
GROUP BY 1,3,2
나는 그 구문이 정말 마음에 들었다.왜 다른 곳에서는 구현되지 않는 거죠?좋은 지름길이지만, 다른 문제가 생길 것 같은데요?
SELECT
CASE WHEN LastName IS NULL THEN FirstName
WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
END AS 'FullName'
FROM customers GROUP BY 1`
다음과 같은 문제가 있는 경우(0과 늘의 값이 동등하게 취급되도록 그룹화)
SELECT AccountNumber, Amount AS MyAlias
FROM Transactions
GROUP BY AccountNumber, ISNULL(Amount, 0)
(예를 들어 SQL Server에서 그룹화 기준 또는 집계 함수에 "금액" 필드가 포함되어 있지 않다고 불평함)
...SELECT에 동일한 기능을 배치하는 것을 잊지 마십시오...
SELECT AccountNumber, ISNULL(Amount, 0) AS MyAlias
FROM Transactions
GROUP BY AccountNumber, ISNULL(Amount, 0)
언급URL : https://stackoverflow.com/questions/497241/how-do-i-perform-a-group-by-on-an-aliased-column-in-sql-server
'programing' 카테고리의 다른 글
| 대상 주체 이름이 잘못되었습니다.SSPI 컨텍스트를 생성할 수 없습니다. (0) | 2023.04.10 |
|---|---|
| 다른 포크의 병합되지 않은 업스트림 풀 요청을 포크에 적용하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| WPF TextBlock과 TextBox 사이에 차이가 있습니까? (0) | 2023.04.10 |
| 열에 다른 열의 값이 포함되어 있는지 확인하시겠습니까? (0) | 2023.04.10 |
| LINQ에서 SQL로의 내부 결합 구문은 무엇입니까? (0) | 2023.04.10 |