SQL-单个表中多行的结果

SQL-单个表中多行的结果,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个名为LEDGER的表。它有三列,分别命名为PATID、code和transdate 示例数据: PATID CODE TRANDATE 1 Z1110 07-15-1970 1 D3330 07-15-1970 1 Z0330 07-15-1970 2 Z1298 07-20-1970 2 Z0987 07-20-1970 2 Z0330 07-20-1970 2 D1092 07-20-1970

我有一个名为
LEDGER
的表。它有三列,分别命名为
PATID
code
transdate

示例数据:

PATID  CODE   TRANDATE
1      Z1110  07-15-1970 
1      D3330  07-15-1970
1      Z0330  07-15-1970
2      Z1298  07-20-1970
2      Z0987  07-20-1970
2      Z0330  07-20-1970
2      D1092  07-20-1970
3      Z0330  08-20-1980
3      Z1110  02-11-1982
我需要一个返回
PATID
的查询,如果它们具有
Z0330
code
,但不是
Z1110
,并且两个代码都显示在同一个
transdate
上。如果存在此情况,我只希望返回一个
PATID
。在上述示例中,输出应为:

PATID  CODE   TRANDATE
2      Z0330  07-20-1970
3      Z0330  07-20-1980

如何编写查询来执行此操作?

您可以使用带有
having
子句的聚合来获取所需内容:

select patid, 'Z0330' as code, transdate
from example
group by patid, transdate
having sum(case when code = 'Z0330' then 1 else 0 end) > 0 and
       sum(case when code = 'Z1110' then 1 else 0 end) = 0;

您可以使用带有
having
子句的聚合来获取所需内容:

select patid, 'Z0330' as code, transdate
from example
group by patid, transdate
having sum(case when code = 'Z0330' then 1 else 0 end) > 0 and
       sum(case when code = 'Z1110' then 1 else 0 end) = 0;

您可以使用带有
having
子句的聚合来获取所需内容:

select patid, 'Z0330' as code, transdate
from example
group by patid, transdate
having sum(case when code = 'Z0330' then 1 else 0 end) > 0 and
       sum(case when code = 'Z1110' then 1 else 0 end) = 0;

您可以使用带有
having
子句的聚合来获取所需内容:

select patid, 'Z0330' as code, transdate
from example
group by patid, transdate
having sum(case when code = 'Z0330' then 1 else 0 end) > 0 and
       sum(case when code = 'Z1110' then 1 else 0 end) = 0;

尝试此操作,首先选择代码为“z1110”的Transdates,然后选择prev查询中没有Transdate的行

SELECT * FROM LEDGER WHERE TRANDATE NOT IN(
    SELECT TRANDATE FROM LEDGER WHERE CODE = 'Z1110'
)
AND CODE = 'Z3330'

尝试此操作,首先选择代码为“z1110”的Transdates,然后选择prev查询中没有Transdate的行

SELECT * FROM LEDGER WHERE TRANDATE NOT IN(
    SELECT TRANDATE FROM LEDGER WHERE CODE = 'Z1110'
)
AND CODE = 'Z3330'

尝试此操作,首先选择代码为“z1110”的Transdates,然后选择prev查询中没有Transdate的行

SELECT * FROM LEDGER WHERE TRANDATE NOT IN(
    SELECT TRANDATE FROM LEDGER WHERE CODE = 'Z1110'
)
AND CODE = 'Z3330'

尝试此操作,首先选择代码为“z1110”的Transdates,然后选择prev查询中没有Transdate的行

SELECT * FROM LEDGER WHERE TRANDATE NOT IN(
    SELECT TRANDATE FROM LEDGER WHERE CODE = 'Z1110'
)
AND CODE = 'Z3330'
这个怎么样

SELECT DISTINCT PATID, TRANDATE
FROM LEDGER L1
where not exists (select 1 from LEDGER L2
              where L1.TRANDATE = L2.TRANDATE
                and L2.CODE = 'Z1110' );
这个怎么样

SELECT DISTINCT PATID, TRANDATE
FROM LEDGER L1
where not exists (select 1 from LEDGER L2
              where L1.TRANDATE = L2.TRANDATE
                and L2.CODE = 'Z1110' );
这个怎么样

SELECT DISTINCT PATID, TRANDATE
FROM LEDGER L1
where not exists (select 1 from LEDGER L2
              where L1.TRANDATE = L2.TRANDATE
                and L2.CODE = 'Z1110' );
这个怎么样

SELECT DISTINCT PATID, TRANDATE
FROM LEDGER L1
where not exists (select 1 from LEDGER L2
              where L1.TRANDATE = L2.TRANDATE
                and L2.CODE = 'Z1110' );

这应该适合你。如果您想要每个月的旧日期,则将订单更改为ASC。当前查询检索每个月的最近一天

这里有一个例子


这应该对你有用。如果您想要每个月的旧日期,则将订单更改为ASC。当前查询检索每个月的最近一天

这里有一个例子


这应该对你有用。如果您想要每个月的旧日期,则将订单更改为ASC。当前查询检索每个月的最近一天

这里有一个例子


这应该对你有用。如果您想要每个月的旧日期,则将订单更改为ASC。当前查询检索每个月的最近一天

这里有一个例子


您认为SQL允许同一语句中有两个
WHERE
子句吗?来吧,看看你的外在疑问,别喊了。我想你已经学会了如何数到二。我的大写字母是开着的,我没有喊叫,对不起,你相信SQL在同一个语句中允许两个
WHERE
子句吗?来吧,看看你的外在疑问,别喊了。我想你已经学会了如何数到二。我的大写字母是开着的,我没有喊叫,对不起,你相信SQL在同一个语句中允许两个
WHERE
子句吗?来吧,看看你的外在疑问,别喊了。我想你已经学会了如何数到二。我的大写字母是开着的,我没有喊叫,对不起,你相信SQL在同一个语句中允许两个
WHERE
子句吗?来吧,看看你的外在疑问,别喊了。我想你已经学会了如何数到二。我的大写字母是开着的,我没有喊叫,对不起,我也得到了“指定了非布尔类型的表达式”错误(使用MSSQL),这会解决日期问题吗?我得到了“指定了非布尔类型的表达式”错误(使用MSSQL),这会解决日期问题吗?我得到了“指定了非布尔类型的表达式”错误(使用MSSQL)也会修复日期问题吗?我得到了“指定了非布尔类型的表达式”错误(使用MSSQL)也会修复日期问题吗?返回每个没有代码Z1110的PATID。与我需要的相反,但我喜欢代码。刚刚开始学习SQL(显然)我喜欢分解这些代码,这样我才能理解。返回每个没有代码Z1110的PATID。与我需要的相反,但我喜欢代码。刚刚开始学习SQL(显然)我喜欢分解这些代码以便理解。返回每个没有代码Z1110的PATID。与我需要的相反,但我喜欢代码。刚刚开始学习SQL(显然)我喜欢分解这些代码以便理解。返回每个没有代码Z1110的PATID。与我需要的相反,但我喜欢代码。我刚刚开始学习SQL(显然),我喜欢分解这些代码以便理解。这是解决方案:从分类账t中选择*其中代码='Z0330'并且不存在(从分类账中选择1,其中PATID=t.PATID,CODE='Z1110'和TRANDATE=t.TRANDATE)这是解决方案:从分类账t中选择*,其中CODE='Z0330'不存在(从分类账中选择1,其中PATID=t.PATID,CODE='Z1110'和TRANDATE=t.TRANDATE)。这是解决方案:从分类账t中选择*,其中CODE='Z0330'不存在(从分类账中选择1,其中PATID=t.PATID,代码='Z1110'和TRANDATE=t.TRANDATE)这就是解决方案:从分类账t中选择*,其中代码='Z0330'不存在(从分类账中选择1,其中PATID=t.PATID,代码='Z1110'和TRANDATE=t.TRANDATE)