Sql 数字还是字符串?如果是数字,请不要对比较值使用引号 我将日期常量更改为标准YYYY-MM-DD格式
你应该Sql 数字还是字符串?如果是数字,请不要对比较值使用引号 我将日期常量更改为标准YYYY-MM-DD格式,sql,sql-server,Sql,Sql Server,你应该 group by case when s.Customer is not null then 'Paid' else 'Free' END, Status, case when CompleteDate < '4/1/2018' then '1H' else '2H' end 分组依据 如果s.Customer不为空,则“已支付”或“免费”结束, 地位 完工日期
group by
case when s.Customer is not null then 'Paid' else 'Free' END,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end
分组依据
如果s.Customer不为空,则“已支付”或“免费”结束,
地位
完工日期<'2018年4月1日'之后为'1H'或'2H'结束
否则,您仍在创建由不同客户和日期组成的组。您应该
group by
case when s.Customer is not null then 'Paid' else 'Free' END,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end
分组依据
如果s.Customer不为空,则“已支付”或“免费”结束,
地位
完工日期<'2018年4月1日'之后为'1H'或'2H'结束
否则,您仍然在创建由不同客户和日期组成的组
我做错了什么
虽然其他答案解释了如何解决问题,但您明确询问了自己做错了什么,我希望这个答案能帮助您理解
对您的选择进行此更改,您将看到:
select
case when s.Customer is not null then 'Paid' else 'Free' END as Paid_Free,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end as Busy,
--my additions
s.customer,
CompleteDate,
count(*) userCount
选择
如果美国客户不为空,则“已付款”或“免费”结束为“免费”,
地位
案例完工日期<'2018年4月1日',然后是'1H'或'2H'结束忙碌,
--我的补充
s、 顾客,
完成,
计数(*)用户计数
不再重复行!(我没有压扁重复项,而是添加了实际分组的列,因此您仍然可以得到所有意外的行,但很容易看出它们出现的原因。)
customer/status/completedate的组合是唯一的,但您可以在数据分组后对其进行转换。转换此数据的结果是它变得不那么精确-2018年4月1日之前有数千个日期,但您有效地将其转换为布尔值(在之前或之后)。所有日期为2018年3月29日、2018年3月28日等的行。。以前是唯一的,现在都变成了相同的值,因此出现了明显的重复
隐藏信息/以这种方式丢失精度会创建重复项
我做错了什么
虽然其他答案解释了如何解决问题,但您明确询问了自己做错了什么,我希望这个答案能帮助您理解
对您的选择进行此更改,您将看到:
select
case when s.Customer is not null then 'Paid' else 'Free' END as Paid_Free,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end as Busy,
--my additions
s.customer,
CompleteDate,
count(*) userCount
选择
如果美国客户不为空,则“已付款”或“免费”结束为“免费”,
地位
案例完工日期<'2018年4月1日',然后是'1H'或'2H'结束忙碌,
--我的补充
s、 顾客,
完成,
计数(*)用户计数
不再重复行!(我没有压扁重复项,而是添加了实际分组的列,因此您仍然可以得到所有意外的行,但很容易看出它们出现的原因。)
customer/status/completedate的组合是唯一的,但您可以在数据分组后对其进行转换。转换此数据的结果是它变得不那么精确-2018年4月1日之前有数千个日期,但您有效地将其转换为布尔值(在之前或之后)。所有日期为2018年3月29日、2018年3月28日等的行。。以前是唯一的,现在都变成了相同的值,因此出现了明显的重复
隐藏信息/以这种方式丢失精度会创建重复数据是否可以发布一些示例数据WHERE子句中的表条件使左连接返回常规内部连接结果。将这些条件移动到ON子句以获得真正的左连接结果。(或者切换到内部联接?)我不认为
CompleteDate
数据类型是DATE
,因为'4/1/2018'
@sami如果CompleteDate是一个日期,sqlserver会将'4/1/2018'字符串转换为日期。您可以发布一些示例数据吗WHERE子句中的表条件使左联接返回常规的内部联接结果。将这些条件移动到ON子句以获得真正的左连接结果。(或者切换到内部连接?)我不认为CompleteDate
数据类型是DATE
,因为'4/1/2018'
@sami如果CompleteDate是日期,sqlserver会将'4/1/2018'字符串转换为日期
select case
when s.Customer is not null then 'Paid'
else 'Free'
end as Paid_Free
, Status
, case
when CompleteDate < '4/1/2018' then '1H'
else '2H'
end as Busy
, count(*) userCount
from CompletesCur OS
left outer join Sales s on S.Cust = ID
where s.ReturnYear = '2017'
and MediaType = 'Online'
and os.ReturnYearFiled = 2017
and s.ReturnYear = s.TransactionTaxYear2
and s.ProductGroup in ('Fed', 'State', 'Phone Support', 'Import')
group by case
when s.Customer is not null then 'Paid'
else 'Free'
end
, Status
, case
when CompleteDate < '4/1/2018' then '1H'
else '2H'
end
select v.Paid_Free, Status, v.Busy,
count(*) as userCount
from CompletesCur OS left join
Sales s
on S.Cust = ID cross apply
(values ( case when s.Customer is not null then 'Paid' else 'Free' END,
case when CompleteDate < '2018-04-01' then '1H' else '2H' end
)
) v(Paid_Free, Busy)
WHERE s.ReturnYear = '2017' and -- is this really a string?
MediaType = 'Online' and -- what table is this from?
os.ReturnYearFiled = 2017 and
s.ReturnYear = s.TransactionTaxYear2 and
s.ProductGroup in ('Fed', 'State', 'Phone Support', 'Import')
GROUP by v.Paid_Free, Status, v.Busy;
group by
case when s.Customer is not null then 'Paid' else 'Free' END,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end
select
case when s.Customer is not null then 'Paid' else 'Free' END as Paid_Free,
Status,
case when CompleteDate < '4/1/2018' then '1H' else '2H' end as Busy,
--my additions
s.customer,
CompleteDate,
count(*) userCount