[sql-server] SQL Server의 값 목록에서 선택하는 방법
해결할 수없는 매우 간단한 문제가 있습니다. 나는 이런 식으로해야합니다 :
select distinct * from (1, 1, 1, 2, 5, 1, 6).
누구든지 도울 수 있습니까 ??
편집하다
데이터는 클라이언트 중 하나에서 텍스트 파일로 제공됩니다. 형식이 완전히 지정되지 않았지만 (한 줄의 매우 긴 텍스트) Excel에서 그렇게 할 수 있습니다. 그러나 SQL 쿼리에서 이러한 값을 사용해야하기 때문에 실용적이지 않습니다. 쿼리를 실행할 때마다 그렇게하는 것이 편리하지 않습니다.
답변
쉼표로 구분 된 긴 텍스트 목록의 고유 한 값 을 얻는 가장 간단한 방법 은 UNION 으로 바꾸기를 사용 하여 고유 한 값을 얻는 것입니다.
SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 1
UNION SELECT 6
쉼표로 구분 된 긴 텍스트 줄에 적용
- 모든 쉼표를 찾아서 바꿉니다.
UNION SELECT
SELECT
명세서 앞에 추가
당신은 지금 작동 쿼리가 있어야합니다
답변
단지 SQL 서버 2008 이상 사용 가능하면이 형태의 행 생성자 :
당신은 사용할 수 있습니다
SELECT DISTINCT * FROM (VALUES (1), (1), (1), (2), (5), (1), (6)) AS X(a)
많은 사람들이 그들 가운데 다음과 같이 썼습니다.
답변
일반적으로 :
SELECT
DISTINCT
FieldName1, FieldName2, ..., FieldNameN
FROM
(
Values
( ValueForField1, ValueForField2,..., ValueForFieldN ),
( ValueForField1, ValueForField2,..., ValueForFieldN ),
( ValueForField1, ValueForField2,..., ValueForFieldN ),
( ValueForField1, ValueForField2,..., ValueForFieldN ),
( ValueForField1, ValueForField2,..., ValueForFieldN )
) AS TempTableName ( FieldName1, FieldName2, ..., FieldNameN )
귀하의 경우 :
Select
distinct
TempTableName.Field1
From
(
VALUES
(1),
(1),
(1),
(2),
(5),
(1),
(6)
) AS TempTableName (Field1)
답변
다음 구문을 사용해 보셨습니까?
select * from (values (1), (2), (3), (4), (5)) numbers(number)
답변
단일 테이블에서 특정 값만 선택하려면 다음을 시도하십시오.
select distinct(*) from table_name where table_field in (1,1,2,3,4,5)
예 :
select first_name,phone_number from telephone_list where district id in (1,2,5,7,8,9)
여러 테이블에서 선택하려면로 이동해야합니다 UNION
.
1, 1, 1, 2, 5, 1, 6 값만 선택하려면이 작업을 수행해야합니다
select 1
union select 1
union select 1
union select 2
union select 5
union select 1
union select 6
답변
PostgreSQL은이를 수행하는 두 가지 방법을 제공합니다.
SELECT DISTINCT * FROM (VALUES('a'),('b'),('a'),('v')) AS tbl(col1)
또는
SELECT DISTINCT * FROM (select unnest(array['a','b', 'a','v'])) AS tbl(col1)
배열 접근 방식을 사용하면 다음과 같이 할 수도 있습니다.
SELECT DISTINCT * FROM (select unnest(string_to_array('a;b;c;d;e;f;a;b;d', ';'))) AS tbl(col1)
답변
이것은 SQL Server 2005에서 작동하며 최대 수가있는 경우 :
SELECT *
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY a.id) NUMBER
FROM syscomments a
CROSS JOIN syscomments b) c
WHERE c.NUMBER IN (1,4,6,7,9)