2016-06-11 7 views
1

私は、SQLクエリのために、Microsoftの認定を準備していたと私は、この例が見つかりました:T-SQL "受注コード%2 = 0" %に何をするか

WITH XMLNAMESPACES('TK461-CustomersOrders' AS co) 
SELECT [co:Customer].custid AS [co:custid], 
[co:Customer].companyname AS [co:companyname], 
[co:Order].orderid AS [co:orderid], 
[co:Order].orderdate AS [co:orderdate] 
FROM Sales.Customers AS [co:Customer] 
INNER JOIN Sales.Orders AS [co:Order] 
ON [co:Customer].custid = [co:Order].custid 
WHERE [co:Customer].custid <= 2 
AND [co:Order].orderid %2 = 0 
ORDER BY [co:Customer].custid, [co:Order].orderid 
FOR XML AUTO, ELEMENTS, ROOT('CustomersOrders'); 

そしてこの説明: T-SQLテーブルをクエリーの列エイリアスを使用して名前空間がプレフィックスされた要素名を生成します。ネームスペースと要素名を区切るために、XMLではコロンが使用されます。 クエリのWHERE句は2人の顧客に出力を制限し、各顧客の2番目の注文のみがを取得します。出力は、要素中心のXML文書です。

説明書には、顧客ごとに2回ごとに注文があると表示されていても、それをしていないようです。 custid < = 2の場合でも、最初の2人の顧客は$ 2 = 0の内容がわからないので、各顧客の2番目の注文をすべて(または少なくとも私の理解に)反映させることはできません。最初の顧客には3つの注文があり、2つ目の顧客には2つの注文があります。 これらは、すべての注文は:

custid companyname orderdate 
1 Customer NRZBB 10643 
1 Customer NRZBB 10692 
1 Customer NRZBB 10702 
1 Customer NRZBB 10835 
1 Customer NRZBB 10952 
1 Customer NRZBB 11011 
2 Customer MLTDN 10308 
2 Customer MLTDN 10625 
2 Customer MLTDN 10759 
2 Customer MLTDN 10926 

、これは、クエリの結果である(xml句なし) お客様IDの仕入先名受注日

1 Customer NRZBB 10692 
1 Customer NRZBB 10702 
1 Customer NRZBB 10952 
2 Customer MLTDN 10308 
2 Customer MLTDN 10926 

誰かが私にこの場所でどのように%の作品を説明してもらえ句? 私は多くの場所で試してみましたが、それは常に類似の演算子に%を関連づけています、そして、私はそうではないと思います。

+0

[MSDN](https://msdn.microsoft.com)で開始し、検索ボックスに 'sql server%'と入力した場合は、 'sql server%operator'が表示されます。顧客ごとに2番目おきの注文を返す場合、顧客ごとに「OrderId」の値が密であることが前提です。それは問題の声明で保証されていますか? – HABO

+0

%のようなものを検索するのは難しいです。 SQL演算子で検索します。 – Paparazzi

+0

@HABOその検索を試しましたか? – Paparazzi

答えて

1

%はモジュロ演算子です。 a % bという一般的な形式は、「aで除算して残りをチェックする」という意味です。ここでは、orderidを2で割り、剰余のない注文を確認します(つまり、orderidだけ戻します)。

+0

答えのおかげで、私はそれが部門に関連していたと思われましたが、私は私のテストで "残りの部分"を考慮しませんでした。 –

1

%は、T-SQLの 'モジュロ'演算子です。これはどのように動作するのですか?orderIdをとり、 '2'で割ります。結果が0の場合は、それを選択します。

したがって、where句はselect文の条件を追加して、すべての結果をorderIdを偶数として返します。結果を確認すると、偶数番号の注文だけが返されます。

+0

お返事いただきありがとうございます。私は盲目になり、 "残りの"演算子を忘れてしまった...私はそれを使用したことも、本で説明されていない。 –

+0

お寄せください。私の仲間@Mureinikに「答え」を投げてくれてありがとう –

関連する問題