【问题标题】:Using results of a SELECT to pull relevant values from another table使用 SELECT 的结果从另一个表中提取相关值
【发布时间】:2018-10-22 19:51:24
【问题描述】:

我正在使用以下查询从表中解析字符串。

SELECT 
    CASE 
       WHEN jobdata LIKE '%DocFtpPassword%' 
          THEN SUBSTRING(jobdata, 
                         CHARINDEX('DefColId=', jobdata) + 9, 
                         CHARINDEX('|DocFtpPassword=', jobdata) - CHARINDEX('DefColId', jobdata) - 9) 
          ELSE 'No Import Library' 
    END AS 'Import_Library' 
FROM
    jobscompleted 

然后我想做的是获取每一行并通过另一个表提取另一个值。我知道我可以写两次相同的语句,如,

SELECT 
    CASE 
       WHEN jc.jobdata LIKE '%DocFtpPassword%' 
          THEN SUBSTRING(jc.jobdata, 
                          CHARINDEX('DefColId=', jc.jobdata) + 9, 
                          CHARINDEX('|DocFtpPassword=', jc.jobdata) - CHARINDEX('DefColId', jc.jobdata) - 9) 
          ELSE NULL 
    END AS 'Import_Library', 
    c.collectionname 
FROM   
    jobscompleted jc 
JOIN 
    collection c ON CASE 
                       WHEN jc.jobdata LIKE '%DocFtpPassword%' 
                          THEN SUBSTRING(jc.jobdata, 
                                         CHARINDEX('DefColId=', jc.jobdata) + 9, 
                                         CHARINDEX('|DocFtpPassword=', jc.jobdata) - CHARINDEX('DefColId', jc.jobdata) - 9) 
                          ELSE NULL 
                    END = c.collectionid 

但这显然是超级多余的。有没有办法以更简洁和可读的方式做到这一点,请记住,我对存储过程或变量一无所知(尽管总是有学习的好时机)。

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    不确定这是否是您要求的。如果不是,请提供有关问题的更多详细信息。

    SELECT * FROM 
    (SELECT 
        CASE 
           WHEN jobdata LIKE '%DocFtpPassword%' 
              THEN SUBSTRING(jobdata, 
                             CHARINDEX('DefColId=', jobdata) + 9, 
                             CHARINDEX('|DocFtpPassword=', jobdata) - CHARINDEX('DefColId', jobdata) - 9) 
              ELSE 'No Import Library' 
        END AS 'Import_Library' 
    FROM
        jobscompleted ) AS jc
    INNER JOIN 
    collection c ON jc.Import_Library  = c.collectionid
    

    【讨论】:

    • 我觉得很傻,但你的回答很有道理。基本上是一个子查询来构建另一个表,然后使用别名来连接。我会试一试,但逻辑真的很合理。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2017-02-17
    • 2012-08-12
    • 2017-04-28
    • 2011-10-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多