1

TOP を SQL クエリ内で動作させるのに問題があります。PART_AML テーブル内の最初の行のみを表示したい。PART テーブルをクエリせずに、そのテーブルのみをクエリしようとしてもうまくいきません。

PART_AML テーブル内の一番上の行のみを表示するにはどうすればよいですか? Microsoft SQL を使用しています。

大変お世話になりました。

SELECT  innovator.PART.STATE, 
    innovator.PART.NAME, 
    innovator.PART.ITEM_NUMBER, 
    innovator.PART.ID, 
    innovator.PART.TYPE, 
    innovator.MANUFACTURER_PART.SPEC_URL

FROM innovator.PART     

join innovator.PART_AML
    on innovator.PART_AML.SOURCE_ID = innovator.PART.ID

join innovator.MANUFACTURER_PART
    on innovator.MANUFACTURER_PART.ID = innovator.PART_AML.RELATED_ID

WHERE
(innovator.PART.IS_CURRENT = 1) AND (innovator.PART_AML.IS_CURRENT = 1) AND (innovator.MANUFACTURER_PART.IS_CURRENT = 1) 

電流出力

    Number  Name        ID      Type        Spec
    E000836 1k          ID1     Resistor    SPEC 1
    E000836 1k          ID1     Resistor    SPEC 2
    E000836 1k          ID1     Resistor    SPEC 3
    E003455 14.400MHz   ID2     Crystal     SPEC 1
    E003455 14.400MHz   ID2     Crystal     SPEC 2
    E003455 14.400MHz   ID2     Crystal     SPEC 3

優先出力

    Number  Name        ID      Type        Spec
    E000836 1k          ID1     Resistor    SPEC 1
    E003455 14.400MHz   ID2     Crystal     SPEC 1
4

2 に答える 2

2

ROW_NUMBER() OVER(ORDER BY ...)これを行うには、ランキング機能を利用できます。

WITH CTE
AS
(
    SELECT  
      i.STATE, 
      i.NAME, 
      i.ITEM_NUMBER, 
      i.ID, 
      i.TYPE, 
      p.SPEC_URL,
      ROW_NUMBER() OVER(PARTITION BY i.ID
                        ORDER BY p.SPEC_URL) AS Rownum
    FROM innovator.PART AS i
    INNER JOIN innovator.PART_AML          AS a on a.SOURCE_ID = i.ID
    INNER JOIN innovator.MANUFACTURER_PART AS p on p.ID        = a.RELATED_ID
    WHERE i.IS_CURRENT = 1 
      AND a.IS_CURRENT = 1
      AND p.IS_CURRENT = 1
)
SELECT *
FROM CTE
WHERE rownum = 1;
于 2013-03-15T15:18:13.303 に答える
0

また、MIN() 関数で単純なGROUP BY句を使用することもできます

SELECT innovator.PART.STATE, 
       innovator.PART.NAME, 
       innovator.PART.ITEM_NUMBER, 
       innovator.PART.ID, 
       innovator.PART.TYPE, 
       MIN(innovator.MANUFACTURER_PART.SPEC_URL) AS SPEC_URL
FROM innovator.PART join innovator.PART_AML on innovator.PART_AML.SOURCE_ID = innovator.PART.ID
                    join innovator.MANUFACTURER_PART on innovator.MANUFACTURER_PART.ID = innovator.PART_AML.RELATED_ID
WHERE (innovator.PART.IS_CURRENT = 1) AND (innovator.PART_AML.IS_CURRENT = 1) AND (innovator.MANUFACTURER_PART.IS_CURRENT = 1)
GROUP BY innovator.PART.STATE, innovator.PART.NAME, innovator.PART.ITEM_NUMBER, innovator.PART.ID, innovator.PART.TYPE  
于 2013-03-15T15:53:23.240 に答える