2016-04-22 14 views
2

Microsoft SQL Serverを初めて使用しており、WHERE句に記載されているすべてのレコードを返すクエリが必要です。私が持っているものは、3行しか返しません。SQLクエリの結果WHERE句のすべてのレコードを返す必要があります。

私はC#を使用してテキストファイルを読み込み、解析しています。そのテキストファイルでは、データベースから結果を取得し、その結果を使用してそのテキストファイルを再構築するためのクエリを作成しています。元のテキストファイルに重複する行が含まれています。各行は、データベースから取得されたデータに関連付けられている必要があります。 - 私は戻っ必要なもの

SELECT tbl1.HdrCode, tbl1.HdrName 
FROM Table1 tbl1 
WHERE tbl1.HdrCode 
IN ('000520', 
'000531', 
'000531', 
'000636') 

は次のとおりです。

000520 Name1 
000531 Name2 
000531 Name2 
000636 Name3 

おかげ

+0

あなたがリストしたレコードのうち、4つすべてを表示する必要がありますが、2番目の「000531」の値は必要ありません。あなたはどんな結果を見ていますか?使用しているクエリは本当ですか?また、他の人の回答から、私はあなたの質問を正しく理解することができますか?私はもう少し説明できますか? – Goose

+0

*私が返す必要があるものは*これは私にとってかなり混乱しています –

+0

編集したので、クエリから星を削除してください。彼らはwhere句の2つのHdrCodeを太字にしました。 – Dresden

答えて

2

あなたが代わりにあなたのテーブルにインライン自分の価値観を持つテーブルとJOINを必要とし、この

のようなものを試してみてくださいIN

SELECT tb1.* 
FROM (VALUES ('000520'), 
       ('000531'), 
       ('000531'), 
       ('000636')) tc (hdrcode) 
     JOIN table1 tbl1 
     ON tc.hdrcode = tb1.hdrcode 
+0

これは私が必要とするものです。ありがとうございました。 – Eric

1

物事がSQLでどのように機能するかをこれではありません。クエリは、そこにあるものだけを返します。テーブルに3行しかなく、そのうちの1行にHdrCode 000531がある場合、そのクエリでは1回だけ返されます。


あなただけのこの具体的な例を解決したい場合は、あなたが使用できます。

SELECT tbl1.HdrCode, tbl1.HdrName FROM Table1 tbl1 WHERE tbl1.HdrCode = '000520' 
UNION ALL 
SELECT tbl1.HdrCode, tbl1.HdrName FROM Table1 tbl1 WHERE tbl1.HdrCode = '000531' 
UNION ALL 
SELECT tbl1.HdrCode, tbl1.HdrName FROM Table1 tbl1 WHERE tbl1.HdrCode = '000531' 
UNION ALL 
SELECT tbl1.HdrCode, tbl1.HdrName FROM Table1 tbl1 WHERE tbl1.HdrCode = '000636' 
+0

これは正しいです。同じHdrCode(000531)でテーブルに2つの行が存在する場合は、2行を表示する唯一の方法です。あなたのINに同じ値を2回指定するだけで、それは2度表示されません。 – Dresden

+0

は、SQLでこれを行う別の方法はありますか? – Eric

+0

全体の目標は何ですか? 「記録を繰り返す」とは言わないでください。私はなぜあなたがこれをしたいのかの大きな写真を意味します。たとえば、どの基準によって1つの値を繰り返すか、他の値は繰り返さないかを指定します。何回レコードを何回繰り返すかを決定するもの。 –

0

のあなたはを必要とします両方の選択を指定する句。

SELECT tbl1.HdrCode, tbl1.HdrName 
FROM Table1 tbl1 
WHERE tbl1.HdrCode 
IN ('000520','000531','000636') 
UNION ALL 
SELECT tbl1.HdrCode, tbl1.HdrName 
FROM Table1 tbl1 
WHERE tbl1.HdrCode 
IN ('000531') 
ORDER BY HdrCode 

これはSqlFiddle次のとおりです。 はあなたの例では、このようなものが必要。

しかし、前にも述べたように、ここでは全体像について考える必要があります。あなたの例だけでなく、この例のための解決策があなたの質問の本当の目的のために働かないかもしれないからです。

関連する問題