0

次のようなテーブルが 1 つあります。

Locid       Paydate                 DelDate                 vtid

5           2013-05-07 18:36:50.000 2013-05-07 18:58:32.000   7
5           2013-05-07 18:36:50.000 2013-05-07 18:58:32.000   8
6           2013-05-07 18:36:50.000 2013-05-07 18:58:32.000   7
6         2013-05-07 18:36:50.000 2013-05-07 18:58:32.000     8
7           2013-05-07 18:36:50.000 2013-05-07 18:58:32.000   7

次のようなストアド プロシージャが 1 つあります。

ALTER PROCEDURE [dbo].[performance] @locid INTEGER=NULL
AS
  BEGIN
      SET NOCOUNT ON;

      SELECT l.LocName,
             v.Vtype,
             SUM(DATEDIFF(MI, t.Paydate, t.DelDate))                                                   AS TotalDiff,
             CONVERT(DECIMAL(10, 1), AVG(CONVERT(NUMERIC(18, 2), DATEDIFF(MI, t.Paydate, t.DelDate)))) AS Average
      FROM   Transaction_tbl t
             LEFT JOIN VType_tbl v
               ON t.vtid = v.vtid
             LEFT JOIN Location_tbl l
               ON t.Locid = l.Locid
      WHERE  t.Locid = @locid
      GROUP  BY v.Vtype,
                l.LocName
  END 

、これでは、一度に1つのlocidしか渡すことができませんが、1つのデータセットに2つのlocidを出力する必要がある場合があります。どうすれば2つのlocidを自動的に渡すことができますか。

4

2 に答える 2

4

テーブル値パラメーターを受け入れるようにストアド プロシージャを変更できます (任意の数のlocids を受け入れることができます) 。

CREATE TYPE [dbo].[LocationIds] AS TABLE(
    locid INTEGER PRIMARY KEY)

それで

ALTER PROCEDURE [dbo].[performance] 
@LocationIds [dbo].[LocationIds] READONLY
AS

そして、をに変更WHEREします

 WHERE  t.Locid in (SELECT locid FROM  @LocationIds  )

名前が一意であることが保証されていない限り、リストにも追加l.Locidします。GROUP BY

于 2013-07-21T10:40:35.217 に答える