2017-07-10 13 views
0

SQLサーバーデータベースにアクセスするためにPHPを使用していますが、PHP変数として2つの数値が格納されています。SQL Serverの2つの変数の間に行が見つからない

例えば、1つの変数は10であり、もう1つの変数は15です。

「欠落している」ドキュメントのリスト、つまり特定の列col11015の間の数字が含まれていない行を出力する必要があります。

例:

col1 
---- 
2 
4 
6 
8 
10 
12 
14 
16 
18 
20 

変数:

$start = 10 
$end = 15 

のみSQLを使用して結果を希望:

result 
------ 
11 
13 
15 
+0

あなただけ 'SQL' –

答えて

0

あなたは数字/集計テーブルを持っていない場合は、あなたが使用することができますアドホック集計表は、LEFT JOIN

Declare @R1 int = 10 
Declare @R2 int = 15 

Select Result= N 
From (
     Select Top (@[email protected]+1) 
       [email protected]+Row_Number() Over (Order By (Select null)) 
     From master..spt_values n1,master..spt_values n2 
     ) A 
Left Join YourTable B on A.N = B.[col1] 
Where B.[col1] is null 

戻り

Result 
11 
13 
15 
0

あなたはさまざまな方法でこれを実装することができ、1つのアプローチは、以下のように参加集計テーブルを生成し、左んです:

Declare @start int = 10 
Declare @end int = 15 

;With CTE_Numbers as (
    Select top (@end - @start+1) RowN = @start + Row_number() over (order by (SELECT NULL)) -1 
     from master..spt_values s1, master..spt_values s2 
     ) 
     Select c.RowN as Result from CTE_Numbers c 
      left join yourtable t 
      on c.RowN = t.col1 
      where t.col1 is null 
+0

を使用したソリューションをはいちょうど気づいたいので、なぜあなたは10がない場合、それはなります、' PHP'にタグを付けました逃した...ありがとう –

0
declare @t table (col1 int); 
    insert into @t values 
    (2), 
    (4), 
    (6), 
    (8), 
    (10), 
    (12), 
    (14), 
    (16), 
    (18), 
    (20) 

    declare @start int = 10, 
      @end int = 15; 

    with nums as 
    (
    select n 
    from 
     (
     select row_number() over(order by getdate()) n 
     from sys.all_columns c1 cross join sys.all_columns c2 
     ) t 
    where n between @start and @end 
    ) 

    select * 
    from nums 
    where not exists (select col1 from @t t where nums.n = t.col1); 
0

私はdbo.Numbers(Numbers PK) tablereference #2)を使用して、クエリを次のようになります。

DECLARE @start INT = 10, @end INT = 15 

SELECT x.Col1 
FROM dbo.SourceTable x 
WHERE x.Col1 >= @start AND x.Col1 <= @end 
AND NOT EXISTS (
    SELECT * FROM dbo.Numbers n 
    WHERE n.Number >= @start AND n.Number <= @end 
    AND n.Number = x.Col1 
) 
関連する問題