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)