代码之家  ›  专栏  ›  技术社区  ›  Md Kamran Azam

如何在SQL Server 2008中为任何一个特定列生成的两列中使用GROUP BY?

  •  0
  • Md Kamran Azam  · 技术社区  · 7 年前

    我有一张桌子 T1 有3列 bpm_no , winame entrytime . 各 BPMNO 在某个时间打开 温纳姆 (阶段)和 温纳姆 可能不同,也可能相同(重复)。它的开放时间是 进入时间 列。我有另一张查找表 T2 其中一个 BPMNO 将显示 温纳姆 这个 BPMNO 当前存在。

    其思想是使用这两个表提取数据,以生成最终表,并在其中显示 BPMNO ,它的电流 温纳姆 温纳姆 最短入境日期。请参考下面的示例

    查阅表格T2:

    +---------------------+------------------+
    |      bpm_no         |     winame       |
    +---------------------+------------------+
    |      abc_0011       |      rm          |
    |     lmn_0012        |      archive     |
    |      xyz_0013       |      lmn         |
    

    表T1:

    +---------------------+------------------+------------------+
    |      bpm_no         |     winame       |   entrytime      |
    +---------------------+------------------+------------------+
    |      abc_0011       |      pending     | 07 June 18       |
    |      abc_0011       |      rm          | 06 June 18       |
    |      abc_0011       |      rm          | 11 June 18       |
    |      lmn_0012       |      archive     |  9 May 18        |
    |      lmn_0012       |      rm          |  10 May 18       |
    |      lmn_0012       |      archive     |  10 May 18       |
    |      xyz_0013       |      lmn         |  11 May 18       |
    |      xyz_0013       |      lmn         |  10 May 18       |
    |      xyz_0013       |      intro       |  06 May 18       |
    

    期望输出:

    +---------------------+------------------+------------------+
    |      bpm_no         |     winame       |   entrytime      |
    +---------------------+------------------+------------------+
    |      abc_0011       |      rm          | 06 June 18       |
    |      lmn_0012       |      archive     | 9 May 18         |
    |      xyz_0013       |      lmn         |  10 May 18       |
    

    在本例中,我有3个bpm_no abc_0011,lmn_0012,xyz_0013。如果您查看查找表t2,bpm不分别位于rm、archive和lmn winame。在表T2中,它显示了BPMYNO的历史,因为WiMeAm有BPMYNO交叉,什么是相同的输入时间。所以,我们只能从T1中选择那些同样位于查找表T2中的winame,然后计算并存储最小entrytime。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Shuwn Yuan Tee    7 年前
    SELECT
        t1.bpm_no,
        t1.winame,
        min(entrytime) min_entrytime
    FROM
        t1 JOIN t2
            ON t1.bpm_no = t2.bpm_no
                AND t1.winame = t2.winame
    
    GROUP BY
        t1.bpm_no,
        t1.winame;