2016-05-02 10 views
-3

SQL Serverにアクティブカードと非アクティブカードを持つ顧客が存在するテーブルがあります。顧客がカードを1つしか持たない場合は、1つの行が返されます。顧客が複数のカードを持っている場合は、アクティブカードの行をどのように返すのですか?両方のカードの合計金額はどのように戻しますか?重複から特定の値を返すSQLクエリ

例:

----------------------------------------     
    CUSTOMER | CARD | AMOUNT | STATUS    
----------------------------------------    
    JOHN DOE | 101 | 100 | 1 
    JOHN DOE | 102 | 200 | 2 
    JANE DOE | 103 | 100 | 2 

所望の出力:

----------------------------------------     
    CUSTOMER | CARD | AMOUNT | STATUS    
----------------------------------------    
    JOHN DOE | 101 | 300 | 1 
    JANE DOE | 103 | 100 | 2 
  • ステータス= 1は、Active、ステータス= 2があれば、私は唯一、1カードが必要になります非アクティブ

を意味意味します顧客は複数ある、私はアクティブカードだけを取得したいが、私はすべての累積額が必要カード。上の表では、両方のカード(300)でジョンの購入総額を取得したいが、アクティブカード(101)の行のみを返す。

私がここで見つけた解決策を試しましたが、復帰したい値の条件があるため、私の要件は少し異なります。

Query to return 1 instance of a record with duplicates

Get Unique Results in a query

SQL query to return one single record for each unique value in a column

量に関して

How to return a single transaction per customer

が、私は、後に顧客IDを使用して両方のカードの累積量を配置することができますが、何があります私にとって今重要なのは、顧客が複数のカードを持っている場合、アクティブなカードだけを返すことができることです。

ここで私が働いているクエリです:

select customer, card, sum(amount), min(active) 
from transactions 
group by customer, card, active 

ありがとう!

答えて

0

各顧客の最低アクティブ値を返すサブクエリがあります。その結果と参加:

select customer, card, amount, active 
from transactions t1 
join (select customer, min(active) as active 
     from transactions 
     group by customer) t2 
    on t1.customer = t2.customer and t1.active = t2.active 
0

サンプルデータ

create table #t 
(
CUSTOMER varchar (100), 
CARD varchar (50), 
AMOUNT varchar (100), 
STATUS int 
) 

insert into #t values ('JOHN DOE','101','100',1) 
insert into #t values ('JOHN DOE','102','200',2) 
insert into #t values ('JOHN DOE','103','300',2) 
insert into #t values ('JOHN DOE','101','100',1) 

QUERY あなたは上記のように保存されたpocedurを作成します -

CREATE PROC RESULT 
AS 
BEGIN 
Select SUM(CONVERT (INT,AMOUNT)) AS [TOTAL AMOUNT] from #t 
Select distinct CUSTOMER,CARD,AMOUNT,STATUS from #t where STATUS=1 
END 

OUTPUT

EXEC RESULT 

TOTAL AMOUNT 
700 

CUSTMER CARD AMOUNT STATUS 
JOHN DUE 101  100 1 
関連する問題