2017-09-28 16 views
0

英語はあまりよくありません。SQL Serverでテーブル値関数を使用する

私のT-SQL機能:

create function sumofOrder(@thang int, @nam int) 
returns table 
as 
return 
    SELECT   
     Sales.SalesOrderDetail.SalesOrderID, 
     Sales.SalesOrderHeader.OrderDate, 
     SUM(Sales.SalesOrderDetail.OrderQty * Sales.SalesOrderDetail.UnitPrice) AS SubTotal 
    FROM    
     Sales.SalesOrderDetail 
    INNER JOIN 
     Sales.SalesOrderHeader ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID 
    GROUP BY 
     Sales.SalesOrderDetail.SalesOrderID, 
     Sales.SalesOrderHeader.OrderDate 
    HAVING   
     (SUM(Sales.SalesOrderDetail.OrderQty * Sales.SalesOrderDetail.UnitPrice) > 70000) 
     AND YEAR(Sales.SalesOrderHeader.OrderDate) = @nam 
     AND MONTH(Sales.SalesOrderHeader.OrderDate) = @thang 

そして今、私は@thangと@namはなく任意の特定の値によってフィルタリングのためにそれを使用したいです。スカラー関数の

例:

select 
    [DepartmentID], [Name], dbo.cau1([DepartmentID]) as 'tongnhanvien' 
from 
    [HumanResources].[Department] 

はあなたにみんなありがとう! PS:私の考えは次のとおりです。select * from [dbo].[sumofOrder](MONTH(Sales.SalesOrderHeader.OrderDate), YEAR(Sales.SalesOrderHeader.OrderDate))

+1

問題は何ですか? – Amit

+1

今質問が明確ではありません。あなたの英語のせいではなく、何が問題なのか、あなたの関数やクエリで何をしたいのかについて言及していないからです。ちょうど情報がありません。 –

+0

この目的のために関数からデータを取得するには、 'CROSS APPLY'([documentation](https://technet.microsoft.com/en-us/library/ms175156(v = sql.105).aspx))を使用しますしかし、作成されたのと同じパラメーターで関数を呼び出す必要があります。このように、関数にパラメータとして '@ DepartmentId'を追加する必要があります。クロス適用する場合は、3つのパラメータすべてを関数に渡す必要があります。 –

答えて

0

Table-Valued User-Defined Functions

単にそれを選択:

select * from sumofOrder(thangValue, namValue) 

またUsing APPLY

適用オペレータはあなたがテーブル値関数を呼び出すことができます 各行はクエリの外部テーブル式によって返されます。 テーブル値関数は右入力として機能し、外側テーブル 式は左入力として機能します。正しい入力は、左入力から各行 のために評価され、生成された行は 最終出力のために結合されます。 APPLY演算子 によって生成された列のリストは、左入力の列のセットと、それに続く右入力の 列のリストです。

EDIT

SELECT f.* 
FROM Sales.SalesOrderHeader s 
CROSS APPLY [dbo].[sumofOrder](month(s.OrderDate), year(s.OrderDate)) f 
+0

私の考えは:select * from [dbo]。[sumofOrder](MONTH(Sales.SalesOrderHeader.OrderDate)、YEAR(Sales.SalesOrderHeader.OrderDate)) –

+0

私の編集を見て、それが動作するかどうか教えてください。 – Horaciux

+0

ありがとう! cảmơnnhiều! –

関連する問題