私はデータの一部を持っている:私は何をしたいか(SQL)グループごとに正しい行を選択するにはどうすればよいですか?
+------------+-----------+-----------+------------+--------------+
| first_name | last_name | family_id | is_primary | is_secondary |
+------------+-----------+-----------+------------+--------------+
| a | b | 1 | 1 | 0 |
| aa | bb | 1 | 0 | 0 |
| c | d | 1 | 0 | 0 |
| cc | dd | 1 | 0 | 0 |
| e | f | 10 | 0 | 0 |
| e | f | 10 | 0 | 1 |
| gg | hh | 10 | 0 | 1 |
| gg | hh | 10 | 0 | 0 |
| gg | hh | 10 | 0 | 0 |
| gg | hh | 10 | 0 | 0 |
+------------+-----------+-----------+------------+--------------+
は以下のとおりです。family_idによって
- グループ(だから我々は2つのグループを持つことになります)
- 各グループについて、存在する場合
is_primary
の行が1に等しい場合は、それらのランダムな行を選択し、グループの2つの列の出力としてfirst_nameとlast_nameを取得します。 is_primary
と等しい行がない場合図1に示すように、行を見つけるis_secondary
が1に等しく、グループの二つの列の出力としてのFIRST_NAMEと姓を得る有する(任意の行がOKである) ので、上記説明した論理とデータ、正確に基づく
結果は次のようになります。
+-----------+------------+-----------+
| family_id | first_name | last_name |
+-----------+------------+-----------+
| 1 | a | b |
| 10 | e | f |
+-----------+------------+-----------+
それとも
+-----------+------------+-----------+
| family_id | first_name | last_name |
+-----------+------------+-----------+
| 1 | a | b |
| 10 | gg | hh |
+-----------+------------+-----------+
私は正しい結果を得るために、クエリを書くことができますどのように?
以下は、テストテーブルを作成するためのスクリプトです。
USE tempdb
GO
IF OBJECT_ID('dbo.mytable') IS NOT NULL DROP TABLE dbo.mytable;
CREATE TABLE mytable (
first_name VARCHAR(2) NOT NULL,
last_name VARCHAR(2) NOT NULL,
family_id INTEGER NOT NULL,
is_primary INTEGER NOT NULL,
is_secondary INTEGER NOT NULL);
INSERT INTO mytable VALUES ('a','b',1,1,0);
INSERT INTO mytable VALUES ('aa','bb',1,0,0);
INSERT INTO mytable VALUES ('c','d',1,0,0);
INSERT INTO mytable VALUES ('cc','dd',1,0,0);
INSERT INTO mytable VALUES ('e','f',10,0,0);
INSERT INTO mytable VALUES ('e','f',10,0,1);
INSERT INTO mytable VALUES ('gg','hh',10,0,1);
INSERT INTO mytable VALUES ('gg','hh',10,0,0);
INSERT INTO mytable VALUES ('gg','hh',10,0,0);
INSERT INTO mytable VALUES ('gg','hh',10,0,0);
GO
SELECT * FROM dbo.mytable;
あなたが試したもの –
はい、私はそれを解決しようとしましたが失敗しました。私は質問を更新しましょう。 –
最初の結果が必要な場合は、簡単に使用してください:use family_id、min(first_name)、min(last_name) from mytable group_id by –