2016-05-19 14 views
0

テーブル上で複数の行を選択したい。しかし、私はフィールドごとにフィールドを選択したい。ここではサンプルの表は、次のとおりです。SQLで複数の行と複数のフィールドを選択する方法

--------------------- 
OrNo | Name | value 
--------------------- 
1154 | Michael | 41 
1154 | Rico | 24 
1487 | Alex | 21 
1487 | Leo  | 27 

私は、テーブル内の複数のあるベースのところ「Orno」コードを選択します。だから私は "OrNO"の1つですべての名前と価値を得たいと思っています。 例として、OrNO 1154の場所を選択します。そのコードから名前と値をすべて選択する方法は?それらを読むためにSQLデータリーダーを使用する方法?

編集:

ベースは答えた、私は申し訳ありませんが、私はC#/ VB.NetとSqlDataReaderのように、コードの後ろに実行したいです。私はvarriableに格納するコードの背後にそれらを実行する方法を知りません。

は、それはあなたの質問を理解するのは難しい

+2

ないでくださいあなたの質問に無関係なタグを投げてより多くの意見を得る。この質問は、C#、VB.NET、または 'SqlDataReader'クラスとはまったく関係ありません。 – jmcilhinney

+0

あなたの意図は簡単ですデータベース内のIMO。クエリを取得するには['w3school'](http://www.w3schools.com/sql/sql_where.asp)にアクセスしてください。 –

+0

いいえ、私は背後のコードでsqldatareaderを使いたいと思います。 VB.NETまたはC#で、コードの背後で実行する方法が分かりません – Bcktr

答えて

0
SELECT * 
FROM MyTable 
WHERE OrNo IN 
(
    SELECT OrNo 
    FROM 
    (
     SELECT OrNo, COUNT(*) AS RecordCount 
     FROM MyTable 
     GROUP BY OrNo 
    ) A 
    WHERE RecordCount > 1 
) 
0

、ありがとうございました。 SQL文を検索していますか?もしそうなら、私は提案するでしょう:

SELECT * 
FROM <TABLE_NAME> 
WHERE OrNo IN 
(
    SELECT OrNo 
    FROM <TABLE_NAME> 
    GROUP BY OrNo 
    HAVING COUNT(*) > 1 
) 

申し訳ありません、@jmcilhinneyはここでより速かったです。

+1

私は実際に試したことはありませんが、サブクエリが複数の列を生成する場合には必ず 'IN'節を使用できることを確認できますか?サブクエリ内に単一の列を生成するためにクエリを構成していましたが、必要がない場合は、より簡単になりますので、しばらくテストしてください。 – jmcilhinney

+1

これはクエリのエラーです。 'OrNo、COUNT(*)AS Count'を選択せず​​、IN節で' OrNo'だけを選択して、あなたは問題ありません。 –

+0

Thorstenありがとうございます。 これも@jmcilhinneyの答えになります。私のクエリがあなたのものと違うという側面は、私がよりシンプルで変更可能であるように思われる2番目のサブクエリを避けることです(明らかに)。特にクエリがより複雑な場合、この亜種はあまり混乱しないでしょう。 答えはうまくいきます:) – Muli

0

あなたはタイで、OrNoあたりの重複したレコードを返し、そうOrNoごとにカウントし、カウントのみ> 1.

select orno, name, value 
from 
(
    select orno, name, value, count(*) over (partition by orno) as cnt 
    from mytable 
) 
where cnt > 1 
order by orno; 
0

そして1以上のレコードを返したい

with t as (
    select * from (values 
    (1154,'Michael',41), 
    (1154,'Rico',24), 
    (1199,'Mary',25), 
    (1487,'Alex',21), 
    (1487,'Leo',27)) t(OrNo, Name, value) 
) 
select top(1) with ties OrNo, Name, value 
from t 
order by 
case count(*) over (partition by OrNo) when 1 then 1 else 0 end 
関連する問題