Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中,试图为触发from条件的每个实例返回一条记录_Sql - Fatal编程技术网

在SQL中,试图为触发from条件的每个实例返回一条记录

在SQL中,试图为触发from条件的每个实例返回一条记录,sql,Sql,也许我对这个问题的看法是错误的,但事情是这样的 我们有一个数据库,它是我们在办公室使用的一些CRM软件的后端。老板想要一个简单的查询,从客户及其配偶那里提取生日信息 SELECT ClientName, NULL AS SpouseName, Birthday FROM ClientDetailsTable WHERE <birthday calculation is true> UNION ALL SELECT ClientName, SpouseName, Spo

也许我对这个问题的看法是错误的,但事情是这样的

我们有一个数据库,它是我们在办公室使用的一些CRM软件的后端。老板想要一个简单的查询,从客户及其配偶那里提取生日信息

SELECT ClientName, NULL AS SpouseName, Birthday
    FROM ClientDetailsTable
    WHERE <birthday calculation is true>
UNION ALL
SELECT ClientName, SpouseName, SpouseBirthday
    FROM ClientDetailsTable
    WHERE <spouse birthday calculation is true>
表格结构如下:

Client Details Table:
Client Name, Client Birthday, Spouse Name, Spouse Birthday, <etc>
SELECT a.*
FROM
  (SELECT
     (CASE    WHEN <birthday calculation>
              ELSE NULL 
      END) as WhoHasBDay,
      ClientName,
      SpouseName
   FROM
     ClientDetailsTable) as a
WHERE
   a.WhoHasBDay IS NOT NULL
我想要的结果集是

CLIENT X BDAY T+5
CLIENT Y SPOUSE BDAY T+8
CLIENT Z BDAY T+3
CLIENT Z SPOUSE BDAY T+9

也许我处理这个问题的方法是错误的,在这种情况下,建议一种更好的方法来解决这个问题将不胜感激。否则,如果有解决办法,请告诉我

将两个查询合并在一起:

 SELECT ClientName, ClientName AS BirthdayPerson, ClientBirthday FROM Clients 
    WHERE ClientBirthday BETWEEN X AND Y
 UNION ALL 
 SELECT ClientName, SpouseName AS BirthdayPerson, SpouseBirthday FROM Clients 
    WHERE SpouseBirthday BETWEEN X AND Y

这将为您提供每个生日介于X和Y之间的人,您可以根据需要更改生日计算。

我将把它作为两个独立查询的组合来处理:一个用于客户,另一个用于他们的配偶

SELECT ClientName, NULL AS SpouseName, Birthday
    FROM ClientDetailsTable
    WHERE <birthday calculation is true>
UNION ALL
SELECT ClientName, SpouseName, SpouseBirthday
    FROM ClientDetailsTable
    WHERE <spouse birthday calculation is true>

您需要在sql中使用union,如下所示:

从ClientDetailsTable中选择*


从配偶有生日的clientDetailsTable中选择*这里是sql server中的一些示例代码。在接下来的16天里给你两种生日类型中最新的第一种

SELECT ClientName, ClientBirthday, null as SouseBirthday, ABS(DATEDIFF(day,GETDATE(),ClientBirthday)) as days
FROM ClientDetailsTable
WHERE ClientBirthday BETWEEN GETDATE() AND DATEADD(day,16,ClientBirthday)
UNION ALL
SELECT ClientName, null as ClientBirthday, SouseBirthday, ABS(DATEDIFF(day,GETDATE(),SouseBirthday)) as days
FROM ClientDetailsTable
WHERE SouseBirthday BETWEEN GETDATE() AND DATEADD(day,16,SouseBirthday)
ORDER BY days asc

注意,未测试的用户可能会输入错误。

SQL Server、mySQL、DB2、Oracle。。。你用的是哪一种?\非常感谢!这是闪电般的迅速和正确的。我觉得自己很笨,因为我把事情弄得太复杂了。再次感谢!万分感谢,你和乔帮了大忙。非常感谢。遗憾的是,我不能把这两个都标为答案,也没有代表能够投票超过你们两个。非常感谢。@AJQuad我期待着一旦你有了代表,我会投票支持你。和其他解决方案一样,感谢你的快速回复。我非常感激。肯定推出了一个变种,并得到了我需要的。