2

単一の行を返す SQL クエリがあります。単一の行のデータが行にバインドされた個々の行として返す必要がある数値のリストがあります。

たとえば、これが私がやろうとしていることです

select a,b,c, barcode
from database
join ('12345', '67890',...) as barcode
where a=1 and b=2 and c=3

クエリから特定の形式を探しているコードを変更しているため、この方法で行う必要があり、コードを変更して私が持っているリテラルリストと一致させることは、このようなことを行うよりもはるかに困難です。

    Example Output:

a     b     c     barcode
-     -     -     -------
1     2     3     12345
1     2     3     67890
1     2     3     ....
1     2     3     ....
...
4

2 に答える 2

2

最も簡単な方法は、単一の列を持つバーコードテーブルを作成し、必要な値を一度に1つずつここに挿入してから、そのテーブルに結合することです。

ユニオンを使ってそれをファッジすることもできます。結合( '484'、 '48583'、...)の問題は、レコードごとに1つの行が必要な場合に、複数の列を持つ単一の行に結合していることです。

疑似コード化:

select a,b,c, barcode
from database
join (select 12345 union all select 289384 union all...)a as barcode
where a=1 and b=2 and c=3
于 2012-05-22T21:17:50.980 に答える
0

基本的に、リストを単一の CSV 文字列として渡し、それを項目の行セットに変換できます。このような場合はテーブル値関数がよく使用されますが、実際には多くの選択肢があります。さまざまなメソッドとそのテストの非常に包括的なコレクションは、Erland Sommarskog による一連の記事: Arrays and Lists in SQL Server にあります

たとえば関数の場合、クエリは次のようになります。

SELECT
  t.a,
  t.b,
  t.c,
  s.Value AS barcode
FROM yourtable t
CROSS JOIN dbo.Split('12345,67890', ',') s
WHERE t.a = 1
  AND t.b = 2
  AND t.c = 3
于 2012-05-22T21:24:36.080 に答える