1

1 対多の関係の最大ステップ数を返すために、Partition By を使用して学習しようとしています。基本的に、会社テーブルで一意の会社 ID が 1 つあります。会社には特定のステップがありますが、これは StepCompany テーブルにいくらでもあります。companID は、stepCompany テーブル内のその会社に存在するすべてのステップに存在します。ステップには StepOrder があります。これは、常にそれらの MAX を返すために使用する必要があるものです。しかし、基本的にどのステップがその会社のキューの最後のステップであるかに基づいて、会社と stepCompany から両方の情報を返す単一のクエリが必要です。私が見つけたソースは、私が Partition By に慣れていないため理解できないか、Partition By にエイリアスを与え、外部選択の最後で、たとえば alias = 1 が好きです。
これは、partition by などのないクエリの戻り値です。

CompanyIDticketID|||| companyCompanyID||| stepCompanyCompanyID|||| stepCompanyStepOrder
----------------- ---------------- -------------------- --------------------
136211     ||||       10B7E005     |||    10B7E005      |||       1

136211     ||||       10B7E005     |||    10B7E005      |||       2

136211     ||||       10B7E005     |||    10B7E005      |||       3

155585     ||||       3A2078C5     |||    3A2078C5      |||       1

155585     ||||      3A2078C5      |||   3A2078C5       |||       2

193256     ||||       95AC74FB     |||    95AC74FB      |||       1

193256     ||||       95AC74FB     |||    95AC74FB      |||       2

210425     ||||       0BAD0261     |||    0BAD0261      |||       1

210425     ||||       0BAD0261     |||    0BAD0261      |||       2

ここでテーブルをきれいに作成する方法がわかりません。

したがって、これらは結合されている2つのテーブルです。companyCompanyID = stepCompanyCompanyID は、それらを結合するために使用されます。したがって、companyID 136211 の場合、stepCompanyStepOrder 3 が返される必要があります。明らかに、stepCompany テーブルのデータが含まれています。companyIDticketID 155585 の場合、stepCompanyStepOrder 2 などが必要です。SQL はきれいではないため、提供したくありません:)

みんなの助けに感謝します!

ありがとう、

4

2 に答える 2

1

これが部分的なクエリです。

WITH records
AS
(
    SELECT  ....,
            ROW_NUMBER() OVER (PARTITION BY CompanyIDticketID
                               ORDER BY stepCompanyStepOrder DESC) rn
    FROM    ....
)
SELECT  *
FROM    records
WHERE   rn = 1

句内に結合クエリをプラグインしWITH、レコードを分割する列を追加するだけです。

于 2013-04-09T15:15:01.740 に答える
1

あなたがそれを提供していないので結合がなければ、それは問題ではありません:

WITH cte 
     AS (SELECT rn = Row_number() 
                     OVER( 
                       partition BY companycompanyid 
                       ORDER BY stepcompanysteporder DESC), 
                companyidticketid, 
                companycompanyid, 
                stepcompanycompanyid, 
                stepcompanysteporder 
         FROM   dbo.tablename) 
SELECT companyidticketid, 
       companycompanyid, 
       stepcompanycompanyid], 
       stepcompanysteporder 
FROM   cte 
WHERE  rn = 1; 

デモ

結果:

COMPANYIDTICKETID   COMPANYCOMPANYID    STEPCOMPANYCOMPANYID    STEPCOMPANYSTEPORDER
210425          0BAD0261            0BAD0261                    2
136211          10B7E005            10B7E005                    3
155585          3A2078C5            3A2078C5                    2
193256          95AC74FB            95AC74FB                    2
于 2013-04-09T15:15:48.997 に答える