【问题标题】:Need help on JOIN and Condition需要关于 JOIN 和 Condition 的帮助
【发布时间】:2016-02-10 14:24:59
【问题描述】:

客户表:

customerId  customerName    startTime   projectDateOfCompletion
1            ANZ             2015-12-05       NULL
2            Barklays        2015-11-25     2016-02-10
3            Grindlays       2016-02-06       NULL

报告表:

customerId  repId   fromDateTime    toDateTim
1           1       2015-12-05      2016-02-05
1           2       2016-02-06         NULL
2           3       2015-11-25      2016-02-10
3           1       2016-02-08         NULL

客户支持表:

repId   customerSupportRep
1       Jim Daniel      
2       Mark Chad       
3       Juan Maximo

不确定如何以表格形式格式化表格。希望看起来像桌子。我正在寻求有关以下查询的帮助

SELECT 
    t.customerName AS 'Customer Name', 
    u.customerSupportRep AS 'Customer   Support Representative', 
    t.startTime AS 'Start Date/Time'
FROM Customer t
    JOIN CustomerSupport u 
        ON u.repId = ( SELECT repId 
                       FROM Reports 
                       WHERE  
                            customerId = t.customerId AND  
                            (CASE 
                                WHEN (@archiveStartTime IS NOT NULL )
                                    then  @archiveStartTime BETWEEN fromDateTime AND toDateTime
                                ELSE toDateTime IS NULL 
                            END)
                    )                        
    WHERE 
        t.projectDateOfCompletion IS NULL OR 
        t.projectDateOfCompletion = '';

如果@archiveStartTime 为NULL,我想要projectDateOfCompletion 为NULL 的记录 如果@archiveStartTime 不为NULL,那么我想列出@archiveStartTime 位于fromDateTimetoDateTime 之间且projectDateOfCompletion 为NULL 的所有记录。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql if-statement join case


    【解决方案1】:

    试试这个:

    `SELECT t.customerName AS 'Customer Name', u.customerSupportRep AS 'Customer   Support Representative', t.startTime AS 'Start Date/Time'
    FROM Customer t
        JOIN CustomerSupport u ON u.repId = ( SELECT repId FROM Reports WHERE  customerId = t.customerId AND  
            ((@archiveStartTime IS NOT NULL
              and @archiveStartTime BETWEEN fromDateTime AND toDateTime)
            or (@archiveStartTime IS NULL AND toDateTime IS NULL )
            ) )
        WHERE t.projectDateOfCompletion IS NULL OR t.projectDateOfCompletion = '';`
    

    查询很难阅读,所以也许我把条件写错了。我的想法是:而不是你在那里做的情况,使用 OR 像这样(如果查询没有运行,你自己调整它而不是情况)

    AND  
            ((@archiveStartTime IS NOT NULL
              and @archiveStartTime BETWEEN fromDateTime AND toDateTime)
            or (@archiveStartTime IS NULL AND toDateTime IS NULL ))
    

    【讨论】:

      【解决方案2】:

      @Mureinik 的此查询
      从我的表中选择 * 当 id = 12345 AND ((TermDate IS NULL AND getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)) 或 GETDATE()

      来自Add Case Statement in Where Clause 帮助解决了这个问题。谢谢@Mureinik

      【讨论】:

        猜你喜欢
        • 2014-03-11
        • 2014-09-25
        • 1970-01-01
        • 2023-01-27
        • 1970-01-01
        • 2017-08-05
        • 2023-04-06
        • 1970-01-01
        • 2011-08-25
        相关资源
        最近更新 更多