문제

추가:SQL Server2000 년 및 2005 년,그래서에는 작업에 모두.또한,value_rk 지 않은 숫자/정수(오류가:피연산자가 데이터 유형에다가 잘못되었을 위한 분산자)

는 방법이 있을 하나의 열"뚜렷한"경기에 대해 걱정하지 않는 다른 반환되는 열?예제:

**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z

나는 반환해야만 하나의 이러한 행 무엇을 기반으로 처음에 하나의(가).내가 여전히 필요한 결과에서 두 번째와 세 번째 열(두 번째해야 실제 경기 모두에 보드는 어쨌든,그러나 세 번째는 독특한 키,나이 필요 적어도 하나의).

여기에 나는 지금까지 있지만,그것은 작동하지 않는 분명히:

SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
    SELECT value, max(value_rk)
    FROM attribute_values
)
ORDER BY attribute_definition_id

에서 일을 하고 있었습니다.ColdFusion 그래서가 있다면 간단한 해결 방법에는 내가 열리는 것뿐만 아니라.내가 노력하고 제한하거나"그룹에 의해"첫 번째 열에"가치".value_rk 내 큰 문제가 있기 때문에 모든 값은 독특한 그러나 나는 하나가 필요합니다.

참고:value_rk 은 숫자가 아니라,따라서 이것은 작동하지 않습

업데이트:나는 버전 작업,그것은 아마 매우보다 조금 느리게 작동하는 순수한 SQL 버전을,하지만 정직하게 작동 아무것도 이점은 아무것보다는 더 낫다.그것은 결과를 처음부터,쿼리에는 두 번째는 쿼리를 제외하고 제한하는 그것은 결과를 하나,그리고 잡고 일치하는 value_rk 에 대한 값이 일치합니다.그래서 다음과 같:

<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
    SELECT DISTINCT value, attribute_definition_id
    FROM attribute_values
    ORDER BY attribute_definition_id
</cfquery>

<cfoutput query="queryBaseValues">
    <cfquery name="queryRKValue" datasource="XXX">
        SELECT TOP 1 value_rk
        FROM attribute_values
        WHERE value = '#queryBaseValues.value#'
    </cfquery>
    <cfset resourceKey = queryRKValue.value_rk>
    ...

그래서 당신이 그것을 선택하는 단 하나 란에서 명백하게 ColdFusion.어떤 순수한 SQL Server2000/2005 제안은 여전히 매우 환영합니다:)

도움이 되었습니까?

해결책

이 작동 수 있습니다:

SELECT DISTINCT a.value, a.attribute_definition_id, 
  (SELECT TOP 1 value_rk FROM attribute_values WHERE value = a.value) as value_rk
FROM attribute_values as a
ORDER BY attribute_definition_id

..테스트하지 않습니다.

다른 팁

SELECT a1.value, a1.attribute_definition_id, a1.value_rk
FROM attribute_values AS a1
  LEFT OUTER JOIN attribute_values AS a2
    ON (a1.value = a2.value AND a1.value_rk < a2.value_rk)
WHERE a2.value IS NULL
ORDER BY a1.attribute_definition_id;

다시 말해서,찾아 행 a1 이 없는 행 a2 존재하는 같은 value 고 더 많 value_rk.

이 작업해야 합 PostgreSQL,내가 알지 못하는 dbms 하고 사용하고 있습니다.

SELECT DISTINCT ON (value)
  value, 
  attribute_definition_id, 
  value_rk
FROM 
  attribute_values
ORDER BY
  value, 
  attribute_definition_id

PostgreSQL 문서

이것이 무엇을 찾고 계신가?

SELECT value, attribute_definition_id, value_rk
FROM attribute_values av1
WHERE value_rk IN (
        SELECT max(value_rk)
        FROM attribute_values av2
        WHERE av2.value = av1.value
)
ORDER BY attribute_definition_id

는 경우 value_rk 은 독특하고,이 작업해야 합니다.

좋아요,여기 나의 가정:

표준 SQL 서버

value_rk 지 않는 숫자 값을 가지고 있지만,가치와 attribute_definition_id 숫자입니다.

SELECT value_rk, MIN(value) as value, MIN(attribute_definition_id) as attribute_definition_id
FROM attribute_values
GROUP BY value_rk
ORDER BY MIN(attribute_definition_id)

는 경우 하나의 필지의 숫자,그때 그것을 필요로 더 많은 생각 알려주시기 바랍니다.

당신이 열려 있을 사용하여 변수 테이블,당신은 그것을 유지할 수 있다 모두 하나의 데이터베이스화가 이:

DECLARE @attribute_values TABLE (value int, attribute_definition_id int, value_rk uniqueidentifier)

INSERT INTO @attribute_values (value)
SELECT DISTINCT value FROM attribute_values

UPDATE @attribute_values
SET attribute_definition_id = av2.attribute_definition_id,
    value_rk = av2.value_rk
FROM @attribute_values av1
INNER JOIN attribute_values av2 ON av1.value = av2.value

SELECT value, attribute_definition_id, value_rk FROM @attribute_values

기본적으로 만들고 있는 제한된 레코드 집합과 테이블로 가득한 값의'value',그리고 시키는 SQL Server 격차를 입력만 사용하여 하나의 일치에서 주요 테이블.

편집을 추가합니다:이 구문에서 작동 cfquery 됩니다.

SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value, value_rk IN (
        SELECT value, max(value_rk)
        FROM attribute_values
        GROUP BY value
)
ORDER BY attribute_definition_id

지 않을 테스트!

나는 확실하지 않다면 완전히 이해하신의 설정이지만,이런 작업:

SELECT value, attribute_definition_id, value_rk
FROM attribute_values
GROUP BY value
ORDER BY attribute_definition_id;

다시,나는지 확인하는 열 그것은 당신이 노력하고 제한하거나,어떻게 당신이 원하는 제한됩니다.

적은 우아한다고 싶----그것은 본질적으로,당신은 무엇을에서는 순수한 SQL---그러나 그것은 작동하고 모든 수행할 수 있습니다 SQL.

DECLARE @mytable TABLE(mykey NVARCHAR(512), myVal NVARCHAR(512))

DECLARE @keyVal NVARCHAR(512)
DECLARE @depVal NVARCHAR(512)
DECLARE myCursor CURSOR for
   SELECT DISTINCT(value) FROM attribute_values
OPEN myCursor
FETCH NEXT FROM myCursor INTO @keyVal
WHILE @@FETCH_STATUS=0
  BEGIN
     SET @depVal = (SELECT TOP 1 attribute_definition_id FROM attribute_values WHERE VALUE=@keyVal ORDER BY attribute_definition_id)
     INSERT INTO @mytable (mykey, myVal) VALUES (@keyVal, @depVal)
     FETCH NEXT FROM myCursor INTO @keyVal
  END
DEALLOCATE myCursor

SELECT * FROM @mytable

을 추가할 수 있습 depVal2 및 다른 사람을 사용하여 이 방법입니다.

나는 생각한

SELECT DISTINCT a.value, a.attribute_definition_id, 
(SELECT TOP 1 value_rk FROM attribute_values WHERE value = a.value) as value_rk
FROM attribute_values as a
ORDER BY attribute_definition_id

에 의해 언급했듯이 존 Fiala,표준에 대답에서 SQL 서버가 사용하여 그룹 절을 수행하려는 경우에는"뚜렷한"조작을 통해 하위 집합의 열이 있습니다.왜 이것이 올바른 정규 대답은?당신이 당신을 당겨서는 열의 일부는 당신의"뚜렷한"그룹에 있습니다.정확히 무엇을 행 당신은 당신을 당기고 싶으면 이러한 자회사 란?를 사용하여 그룹에 의해 절 정의 및 집계 기능에 대한 이러한 자회사 열을 쿼리를 잘한다는 의미에서 당신은 지금 알고 어떻게 이러한 자회사 열을 얻을 수 있습니다.이 문서에서는 더 상세정보:

http://weblogs.sqlteam.com/jeffs/archive/2007/10/12/sql-distinct-group-by.aspx

SELECT value_rk, MIN(value) as value, 
MIN(attribute_definition_id) as attribute_definition_id
FROM attribute_values
GROUP BY value_rk

또한,그 가치는 최소 및 최대 작업에 텍스트와 여러 가지 다른 데이터의 유형되지 않는 숫자 값이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top