内连接查询中的SQL IF语句

时间:2014-12-23 06:04:13

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我有三个表格图像和参数,如下所示。我在构建查询时遇到问题。确切的结果不会显示在一个查询中。我想从主表中获取信息。

在表格中,客户I填写来自常规和主要和常规的数据在主表下。我想联合下面的查询

查询1

SELECT Customer.CustomerId,
       Customer.RefId,
       Regular.LicenseId,
       Regular.ControlId,
       Master.MasterId,
       Master.FullName,
       Master.profile
FROM   Customer
       INNER JOIN Regular
               ON Customer.RefId = Regular.LicenseId
       INNER JOIN Master
               ON Regular.ControlId = Master.MasterId 

查询2

SELECT Customer.CustomerId,
       Customer.RefId,
       Master.FullName,
       Master.profile
FROM   Customer
       INNER JOIN Master
               ON Customer.RefId = Master.MasterId 

结果

enter image description here

如何在一个查询中获得两个结果。我厌倦了使用不同的不同陈述。我可以为此获得解决方案......

1 个答案:

答案 0 :(得分:0)

UNION应包含相同数量的列

SELECT Customer.CustomerId,
       Customer.RefId,
       Regular.LicenseId,
       Regular.ControlId,
       Master.MasterId,
       Master.FullName,
       Master.profile
FROM   Customer
       INNER JOIN Regular
               ON Customer.RefId = Regular.LicenseId
       INNER JOIN Master
               ON Regular.ControlId = Master.MasterId
UNION ALL
SELECT Customer.CustomerId,
       Customer.RefId,
       '' LicenseId,
       '' ControlId,
       '' MasterId,
       Master.FullName,
       Master.profile
FROM   Customer
       INNER JOIN Master
               ON Customer.RefId = Master.MasterId 

<强>更新

声明一个参数以传递查询字符串(r%或m%)

-- DemoProc 'R'
CREATE PROCEDURE Demoproc @param VARCHAR(50)
AS
  BEGIN
      SET NOCOUNT ON;

      IF( @param LIKE 'R%' )
        BEGIN
            SELECT Customer.CustomerId,
                   Customer.RefId,
                   Regular.LicenseId,
                   Regular.ControlId,
                   Master.MasterId,
                   Master.FullName,
                   Master.profile
            FROM   Customer
                   INNER JOIN Regular
                           ON Customer.RefId = Regular.LicenseId
                   INNER JOIN Master
                           ON Regular.ControlId = Master.MasterId
        END
      ELSE IF( @param LIKE 'M%' )
        BEGIN
            SELECT Customer.CustomerId,
                   Customer.RefId,
                   '' LicenseId,
                   '' ControlId,
                   '' MasterId,
                   Master.FullName,
                   Master.profile
            FROM   Customer
                   INNER JOIN Master
                           ON Customer.RefId = Master.MasterId
        END
  END

GO