2016-07-28 5 views
-1

私は以下のテーブルデータを持っています。このシナリオでは、従業員は1または0、または(1,0)のいずれかを有することができるが、決して従業員は、複数の1と複数の0SQL上の部分テーブルデータのグループ化

ステータス

<table> 
 
\t <tr> 
 
\t \t <th> Employee</th> 
 
\t \t <th> Status </th> 
 
    <tr> 
 
    <tr> 
 
\t \t <td>abc </td> 
 
\t \t <td> 1</td> 
 
    </tr> 
 
    <tr> 
 
\t \t <td>abc </td> 
 
\t \t <td> 1</td> 
 
    </tr> 
 
    <tr> 
 
\t \t <td>PQR </td> 
 
\t \t <td> 1</td> 
 
    </tr> 
 
    <tr> 
 
\t \t <td>XYZ </td> 
 
\t \t <td> 0</td> 
 
    </tr> 
 
</table>
の組み合わせで存在します

以下は出力から期待されるものです。意味

<table> 
 
\t <tr> 
 
\t \t <th> Employee</th> 
 
\t \t <th> Status </th> 
 
    <tr> 
 
    <tr> 
 
\t \t <td>abc </td> 
 
\t \t <td> $</td> 
 
    </tr> 
 
    <tr> 
 
\t \t <td>PQR </td> 
 
\t \t <td> yes</td> 
 
    </tr> 
 
    <tr> 
 
\t \t <td>XYZ </td> 
 
\t \t <td> no</td> 
 
    </tr> 
 
</table>

、重複したレコードがある場合、1は[はい0ならば、第

この

に助けるため、事前にいただきありがとうございます場合は、ステータスは、$べきです

私がしようとしているもの:

;with CTEE (RowNumber, EmployeeName, [Status]) As 
(select a.RowNumber, 
     a.EmployeeName, 
     case when a.rowNumber > 1 then '' 
      when a.rowNumber = 1 and Working = 0 then 'N' 
      else 'Y' end as [Status] 
from (select Row_Number() over(Partition by EmployeeName order by EmployeeName) as [RowNumber], 
     EmployeeName, 
     [Status] 
     from [Table] 
     group by EmployeeName, [Status]) a) 

select EmployeeName, [Status] 
from CTEE c1 
where (RowNumber = 1 
and EmployeeName not in 
     (select EmployeeName 
     from CTEE where EmployeeName = c1.EmployeeName and [Status] = '')) or RowNumber =2 
+0

「; CTEE(RowNumber関数、EmployeeName、[状態]) として で(a.RowNumberを選択し、 a.EmployeeName、ケース場合a.rowNumber> 1、次いで '*' \t \t \t \t場合a.rowNumber = 1と作業= 0次いで、 'N' 他 \t \t \t から[状態] として 'Y' 末端( )Row_Number()を超える(EmployeeName順のEmployeeName順のパーティション) 【RowNumber関数】として、EmployeeName、EmployeeNameによって[表] 基、[状態] ) )から[状態] はEmployeeNameを選択 、[状態] でないCTEE C1を (RowNumber関数= 1とEmployeeNameから(CTEEからEmployeeNameを選択してください。EmployeeName = c1.EmployeeNameと[Status] = '*'))またはRowNumber = 2 ' –

+0

**質問にクエリを追加してください。 –

答えて

0

これまでのアプローチの多くはここにありますCOUNT()を取得するために、派生テーブルを使用するものである:

SELECT T.Employee, 
     CASE WHEN Cnt > 1 THEN '$' 
      WHEN Cnt = 1 AND Status = 1 THEN 'yes' 
      ELSE 'no' END as 'Status' 

FROM  (SELECT DISTINCT Employee, Status 
      FROM Table) T 
INNER JOIN (SELECT COUNT(STATUS) as 'Cnt', Employee 
      FROM Table 
      GROUP BY Employee) T2 on T2.Employee = T.Employee 
+0

返信いただきありがとうございます。同様のアプローチをしました...あなたが与えたクエリでは、ステータス$の重複レコードが返されます。これを避けることができますか? –

+0

私はそれを持っています...ありがとうございます –

+0

@VinayakShindagi最初の内側のクエリの 'DISTINCT'選択はそれを処理しているはずです...別のノートでは、SOにようこそ。最初の質問については、あなたのものは良かったが、将来の質問では、あなたが試したことを遠くに投稿してください。たとえそれが完全に間違っていても、問題はよりよく受け取られます。もちろん、正解をマークアップ/マークしてください。 ;) –