我想从一行显示记录

时间:2010-10-20 17:25:59

标签: sql sql-server-2005 tsql

表1(历史数据)

SiteName    OutcomeType  SpeciesType     Count  DateType
-------------------------------------------------------------
S1          Adopted         Dog             3       0
S2          Adopted         Cat             12      0
S1          Transferred     Puppy           2       0
S1          Transferred     Dog             5       0

表2(当前数据)

SiteName    OutcomeType     SpeciesType     Count   DateType
--------------------------------------------------------------
S1          Adopted         Dog             9       1
S2          Adopted         Dog             10      1
S1          Transferred     Dog             12      1

** DateType:0 - 表示历史日期,1-当前日期
我将上面的2个表数据合并到1个表中,并将其称为主表(它是存储过程中的临时表)。哪个会如下所示。

SiteName    OutcomeType     SpeciesType     Count    DateType
-------------------------------------------------------------
S1          Adopted         Dog             3        0
S2          Adopted         Cat             12       0
S1          Adopted         Dog             9        1
S2          Adopted         Dog             10       1
S1          Transferred     Puppy           2        0
S1          Transferred     Dog             5        0
S1          Transferred     Dog             12       1

这里基本上我试图比较历史和当前的数据 用户将输入2个日期(例如:Oct2009,Oct2010)
现在所有数据都在1个表中提取,如上所示。

从主表中注意到(存储过程中的临时表)
站点S1有一种物种类型:Puppy,它来自历史日期 如何匹配当前表记录中的记录(物种类型Puppy中不存在的记录)。

我想在1行中显示上述记录,如下所示。

SiteName1 OutecomeType1 AgeSpecies1 Count1  History SiteName2 OutcomeType2 AgeSpecies2  Count2  Current Difference
S1  Adopted Dog 3   yes S1  Adopted Dog 9   yes 6
S1  Transferred Puppy   2   yes -   -   -   -   -   -
S2  Adopted Cat 12  yes -   -   -   -   -   -
S1  Transferred Dog 5   yes S1  Transferred Dog 12  yes 7
-   -   -   -   -   S2  Adopted Dog 10  yes

10

1 个答案:

答案 0 :(得分:1)

我会为每个表编写一个查询,以从该表中获取基本计数以用作派生表。然后我将使用完全外部联接将两个表连接在一起。然后从每个派生表中拉出所需的字段。只需确保派生表查询仅为每个siteName拉出一行。