[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)