공통 테이블 식 (CTE) 내에서 재귀를 사용하여 여러 행을 연결합니다. 재귀가 잘 작동합니다. 그러나 CTE 후 SELECT
문에서 연결된 문자열이있는 행만 반환하려고합니다. 하지만 MAX (stringValue) 가장 짧은 문자열을 반환합니다. MIN (stringValue)을 사용하면 올바른 (가장 긴) 문자열을 반환합니다. 왜 그런가요?
이는 CTE의 데이터가 모든 행을 반환 할 때입니다 :GROUP BY 결과가 Max() 문자열을 반환하지 않습니다.
SELECT MAX(Row) AS RowNumber, MAX(TableName) AS Tbl, MAX(Script)
FROM CTE
GROUP BY TableName
내 결과는 다음과 같습니다
Row TableName Script
1 Activity This is a string that I created.
1 Table2 This is another string.
2 Table2 This is another string. This is another string.
1 Table3 Test string.
2 Table3 Test string. Test string 2.
3 Table3 Test string. Test string 2. Test string 3.
나는 MAX (행) 만 행을 반환하는이 쿼리를 사용
이 :Row TableName Script
1 Activity This is a string that I created.
2 Table2 This is another string.
3 Table3 Test string.
올바른 행은 반환되지만 올바른 스크립트는 아닙니다. 나는이 쿼리를 사용하는 경우 는 :
SELECT MAX(Row) AS RowNumber, MAX(Table) AS Tbl, MIN(Script)
FROM CTE
GROUP BY TableName
을 나는 즉, 정확한 데이터를 얻을. 가장 긴 문자열. 이유가 무엇인가요?
다른 쿼리에서 이것을 사용했으며 올바른 문자열, 즉 가장 긴 문자열이 반환되었습니다.
나는 이러한 결과가 예측할 수없고 일관성이 없을 것이라고 우려하고 있습니다.
UPDATE 나는 이러한 행을 반환하려면 :
Row TableName Script
1 Activity This is a string that I created.
2 Table2 This is another string. This is another string.
3 Table3 Test string. Test string 2. Test string 3.
'MAX'를 사용하면 문자열을 첫 번째'.'로 자르고,'MIN '을 사용하면 완전한 값을 얻을 수 있습니까? – techspider
No. Max()는 가장 짧은 문자열을 반환합니다. Min()은 가장 길다를 반환합니다. –
Min/Max는 문자열의 길이에 상관하지 않으며 알파벳 순서를 신경 쓰고 있습니다. – sstan