我还是SQL新手,所以我可能做错了,但是......
我需要明确预约日期。因此,对于cust.id 1,John应该有3个约会日期,Sara应该有2个约会的约会日期。
临时表(EC):
|cust.id | emp_name | emp_id | APPT_DATE | Procedure_Code | something1|
|:------:|:--------:|:------:|:--------------:|:--------------:|:---------:|
| 1 | john | 100 | 2/2 00:00:00 | a0 | w/e |
| 1 | john | 100 | 2/3 00:00:00 | b1 | w/e |
| 1 | john | 100 | 2/4 00:00:00 | c2 | w/e |
| 1 | Sara | 200 | 2/2 00:00:00 | d3 | w/e |
| 1 | Sara | 200 | 2/3 00:00:00 | e4 | w/e |
回答我正在寻找:
| cust.id | emp_name | emp_id | CNT | APPT_DATE | Procedure_Code |
|:-------:|:--------:|:------:|:---:|:-------------:|:--------------:|
| 1 | john | 100 | 3 | 2/2 00:00:00 | a0101 |
| 1 | john | 100 | 3 | 2/3 00:00:00 | b1234 |
| 1 | john | 100 | 3 | 2/4 00:00:00 | c0101 |
| 1 | Sara | 200 | 2 | 2/2 00:00:00 | d0101 |
| 1 | Sara | 200 | 2 | 2/3 00:00:00 | e1234 |
我的代码:
SELECT cust_id
,emp_name
,emp_id
,COUNT(DISTINCT APPT_DATE)
OVER (PARTITION BY cust_id, APPT_DATE) AS CNT
,APPT_DATE
,Procedure_Code
FROM #EC
ORDER BY cust_id
答案 0 :(得分:0)
select a.*,b.CNT
from(
SELECT cust_id
,emp_name
,
,APPT_DATE
,Procedure_Code
FROM #EC
) as a inner join (select count(distinct appt_date)as cnt, emp_id from #EC group by emp_id)as b
on a.emp_id = b.emp_id
我认为上面的代码可以帮到你。
答案 1 :(得分:0)
从PARTITION BY中移除APPT_DATE
COUNT(DISTINCT APPT_DATE)
OVER (PARTITION BY cust_id) AS CNT
编辑1:更改为交叉应用(不允许带有OVER()的DISTINCT)
FROM #EC e
CROSS APPLY
(
SELECT COUNT(DISTINCT APPT_DATE) as CNT
FROM #EC x
WHERE x.cust_id = e.cust_id
AND x.emp_id = e.emp_id
) c
答案 2 :(得分:0)
下面的内容可能会有所帮助:
select ec.cust_id, ec.emp_name, ec.emp_id, t.cnt, ec.APPT_DATE, ec.Procedure_Code
from #EC ec
join
(
SELECT cust_id, emp_id ,COUNT(distinct APPT_DATE) CNT
FROM #EC
group BY cust_id, emp_id
) t
on ec.cust_id = t.cust_id and ec.emp_id = t.emp_id
答案 3 :(得分:0)
我从评论中看到,日期计数应该由cust_id
和emp_id
来区分。.
SELECT cust_id
,emp_name
,emp_id
,oat1.Count_Appt_Date
,APPT_DATE
,Procedure_Code
FROM #EC
OUTER APPLY (SELECT ec2.cust_id
, ec2.emp_id
, COUNT(DISTINCT(CONVERT(date, ec2.[APPT_DATE]))) AS Count_Appt_Date
FROM #EC ec2
WHERE ec2.cust_id = #EC.cust_id
AND ec2.emp_id = #EC.emp_id
GROUP BY ec2.cust_id, ec2.emp_id) oat1
ORDER BY cust_id