1

SQLServer2008 を使用しています。

私のストアドプロシージャの出力は次のとおりです。

--------------------------------------------------------
 BrokerCode | MemberId  |  FY    |    SY    |    TY    |
--------------------------------------------------------
    104     |    24     |  1140  |    0.00  |    0.00  |
--------------------------------------------------------
    104     |    24     |  1140  |    570   |    0.00  |
--------------------------------------------------------
    104     |    30     |  500   |    0.00  |    0.00  |
--------------------------------------------------------
    104     |    30     |  500   |    360   |    0.00  |
--------------------------------------------------------

そして、私は次のようになりたい:

--------------------------------------------------------
 BrokerCode | MemberId  |   FY    |    SY    |    TY    |
--------------------------------------------------------
    104     |    24     |   1140  |    570   |    0.00  |
--------------------------------------------------------
    104     |    30     |   500   |    360   |    0.00  |
--------------------------------------------------------

だから私は使ってみました:

WITH CTE AS ( 
SELECT BrockerCode,
     MemberId,

     RN=ROW_NUMBER()OVER(PARTITION BY MemberId ORDER BY MemberID),
     FY=MIN(FY)OVER(PARTITION BY MemberId),
     SY=MIN(SY)OVER(PARTITION BY MemberId),
     TY=MIN(TY)OVER(PARTITION BY MemberId)

     FROM   @tablePromotee )
SELECT MemberId,BrockerCode,FY,SY,TY  FROM  CTE  WHERE  RN = 1 

それでも間違った結果が表示されます...助けてください..どこが間違っていますか? ありがとう。

4

5 に答える 5

1

Common Table Expressionここではあまり必要ありません。はるかに単純なクエリ:

SELECT 
      BrokerCode,
      MemberId,
      MAX(FY) AS FY,
      MAX(SY) AS SY,
      MAX(TY) AS TY
FROM YourTable
GROUP BY BrokerCode, MemberId

SQL フィドルのデモ

于 2013-04-24T06:06:13.753 に答える
1

クエリで「GROUP BY」を使用するだけです

SELECT BrockerCode,
     MemberId,
     MIN(FY)
     MIN(SY)
     MIN(TY)
     FROM   @tablePromotee GROUP BY BrockerCode, MemberId

要件に応じてそれらから使用できるSQLサーバーには複数の集計関数があります。

于 2013-04-24T06:00:44.573 に答える
0

これを試してみてください -

SELECT 
      MemberId
    , BrockerCode
    , FY = MAX(FY)
    , SY = MAX(SY)
    , TY = MAX(TY)  
FROM (
    SELECT 
          BrockerCode
        , MemberId
        , RN = ROW_NUMBER()OVER(PARTITION BY MemberId ORDER BY MemberID)
        , FY = MIN(FY)OVER(PARTITION BY MemberId)
        , SY = MIN(SY)OVER(PARTITION BY MemberId)
        , TY = MIN(TY)OVER(PARTITION BY MemberId)
    FROM @tablePromotee 
)  
WHERE RN = 1
GROUP BY 
      BrokerCode
    , MemberId  

またはこれを試してください -

SELECT TOP 1
      BrockerCode
    , MemberId
    , FY = MAX(MIN(FY)OVER(PARTITION BY MemberId))
    , SY = MAX(MIN(SY)OVER(PARTITION BY MemberId))
    , TY = MAX(MIN(TY)OVER(PARTITION BY MemberId))
FROM @tablePromotee 
GROUP BY 
      BrokerCode
    , MemberId
ORDER BY MemberId
于 2013-04-24T05:55:48.710 に答える
0

これを試して、

   SELECT BrockerCode,
          MemberId, FY,SUM(SY),SUM(TY) FROM @tablePromotee Group By BrockerCode,
          MemberId, FY
于 2013-04-24T05:55:59.420 に答える
0

以下のように o.oo 値を既存のコードの最後の行に変更することになる可能性があるため、group by を使用するだけでは機能しません。

 SELECT MemberId,BrockerCode,FY,SY,TY  FROM  CTE  WHERE  RN = 1 and SY<>0
 ROUP BY BrockerCode, MemberId 
于 2013-04-24T06:09:46.747 に答える