web-dev-qa-db-ja.com

1列から個別の値を選択します

このクエリを使用して、1つの列(BoekingPlaatsId列)から個別の値を選択します。

SELECT MAX(BoekingPlaatsId), BewonerId, Naam, VoorNaam
FROM table
GROUP BY BewonerId, Naam, VoorNaam

SQL Serverでこれを行うにはどうすればよいですか?

23
Parm

DISTINCTは、ユーザー名だけが必要な場合に機能するはずです。

SELECT DISTINCT BewonerId, Naam, Voornaam
FROM TBL

ただし、最小ID値が必要な場合は、名前でグループ化します...

SELECT MIN(BoekingPlaatsId), MIN(BewonerId), Naam, Voornaam
FROM TBL
GROUP BY Naam, Voornaam
20
doza

使えるはずだと思う

SELECT DISTINCT BewonerId, Naam, VoorNaam

次の理由により、BoekingPlaatsIdを追加できません。

  • DISTINCTは一意のを探します
  • 必要なBoekingPlaatsId値を指定する必要があります
    (Jan Janssensの場合、BoekingPlaatsId 1または2が必要ですか?)

これも機能します:

SELECT MAX(BoekingPlaatsId), BewonerId, Naam, VoorNaam
FROM ...
GROUP BY BewonerId, Naam, VoorNaam
7
Sander Rijken

私はこれをたくさんしませんので、構文を100%確信していませんので、少し微調整し、グーグルランクオーバーしてパーティションする必要があるかもしれません。これを試して...

SELECT 
    *,
    RANK() OVER(PARTITION BY Naam  order by Naam ) as Rank
FROM
    TABLE
WHERE 
    Rank = 1

これは4列のテーブルではやり過ぎですが、多くの列を持つかなり非正規化されたテーブルがある場合、このアプローチは1列での個別選択には非常に役立ちます。

6
Paul Creasey

私は同様の問題に遭遇し、私にとって解決策はGROUP BY句を使用していました。基本的に、すべてのブログを1つのグループと同じタイトルでグループ化しました。

構文:

SELECT post_title, post_link
FROM blogs
WHERE [ conditions ]
GROUP BY post_title
ORDER BY post_title;

多分あなたは複数の列をグループ化しています

0
S.Joshi

ちょうどそれらの2列でグループ化

  Select Min(BoekingPlaatsId), Min(bewonerId), naam, voornaam
  from table
  group By naam, voornaam
0
Charles Bretana
select Naam, Voornaam, min(BewonerId), min(BoekingPlaatsId) from tableName
group by Naam, Voornaam
0
BlackTigerX

あなたが探しているのは次のようなものだと思います:

select distinct column1 from table1 where column2 = (select distinct column2 from table1)
0
Michael

これは、列に一意の値のみを持つテーブルから選択する方法です。

CREATE VIEW [yourSchema].[v_ViewOfYourTable] AS
WITH DistinctBoekingPlaats AS
(
    SELECT [BewonerId], 
           [Naam],
           [VoorNaam],
           [BoekingPlaatsId],
           ROW_NUMBER() OVER(PARTITION BY [BoekingPlaatsId] ORDER BY DESC) AS 'RowNum'
    FROM [yourSchema].[v_ViewOfYourTable]
)
SELECT * 
FROM DistinctProfileNames
WHERE RowNum = 1
--if you would like to apply group by you can do it in this bottom select clause but you don't need it to gather distinct values 

これを行うためにgroup byは必要ありません。

0
Thrillseeker419