I have a database table with the following kind of data data
S_Acc_RowID BU_Customer_Segment PBU
1111-00 PSG SMB -1
1111-00 SMB -1
1111-00 EB Seg 1
1111-01 PSG SMB 1
1111-01 SMB -1
1111-01 EB data -1
1111-02 PSG Seg -1
1111-02 Unattended -1
1111-02 Channels -1
---------------- like 7 million rows
now I want to extract single row for each Acc ID where the conditions are
1) if the **Acc ID** is having 'EB --' in **CustSeg** then select that **CustSeg** value
2) if **Acc Id** is not having any 'EB -- ' in CustSeg then select **CustSeg** where **PBU** = 1
3) if the both above failed take any one value of the **CustSeg**
and the end data I want should be like
S_Acc_RowID BU_Customer_Segment
1111-00 EB seg
1111-01 EB Data
1111-02 (any one of three[PSG seg/ UNattended/channels])
I'm using the following query
select
distinct(A.[S_Acc_RowID]) as [Account_RowID],
[EB Customer Segment] =
case
when LEFT(A.[BU_Customer_Segment],2) = 'EB' then A.[BU_Customer_Segment]
when LEFT(A.[BU_Customer_Segment],2) != 'EB' then
(select B.[BU_Customer_Segment] from
dbo.[SiebelAccount Extract] B
where A.[S_Acc_RowID]=B.[S_Acc_RowID]
and [PBU] = 1)
else A.[BU_Customer_Segment]
end,
A.[S_Acc_AMID2#] as [AMID Level 2(Acc)],
A.[S_Acc_Login_P] as [Sales Team(Acc)],
A.[S_Acc_Org_P] as [Country_det],
A.[Customer AMID Level 2 Name(ACC)]
from dbo.[SiebelAccount Extract] A
But it is returning the the data like this
S_Acc_RowID BU_Customer_Segment
1111-00 EB seg
1111-01 PSG SMB
1111-01 EB Data
1111-02 null
I don't want to display two rows for the ID 1111-01 ..I want only one row with EB
please help me with this ..
Thanks in advance..
Cheers,
Harish