group by 子句不是分组依据
group by clause not grouping by
我用 MSSQL 编写了以下查询:
Select customer.name,
max(callnote.ID),
CAST (callnote.NOTE as VARCHAR(100))
from callnote
join CONTACT
on
contact.ID=callnote.CONTACT_ID
join CUSTOMER
on
customer.ID=contact.CUSTOMER_ID
where callnote.TYPE='n' and CUSTOMER.AcctClass>='1'
group by customer.NAME, CAST (callnote.NOTE as VARCHAR(100))
order by customer.NAME
我希望每个客户名称只收到一条记录(最后一条记录)。 (789 行,当我将 'CAST (callnote.NOTE as VARCHAR(100))' 排除在查询之外时得到的)我得到的是每个联系人的最后一个注释(11,500 多行)。我绞尽脑汁好几个小时,重写了这么多次。客户 table 和 callnote table 之间没有公共列。我如何让它只显示每个客户的最后一条注释?
我假设你想要来自 max callnote id 的笔记中的笔记?所以像这样:
Select
C.name,
n.ID,
n.NOTE
from
CUSTOMER c
outer apply (
select top 1
callnote.ID,
CAST (callnote.NOTE as VARCHAR(100))
from
CONTACT
join callnote
on contact.ID=callnote.CONTACT_ID and callnote.TYPE='n'
where
c.ID=contact.CUSTOMER_ID
order by
callnote.ID desc) n
where
c.AcctClass>='1'
order by
c.NAME
所以这总是从该客户的最大 ID 中获取行。希望语法没问题,不能真正测试这个。
你能试试这个吗
SELECT Name, MAX(CallNoteID) CallNoteID, CallNote
FROM
(
SELECT Customer.Name,
CallNote.ID CallNoteID,
TRIM(CAST(CallNote.Note as VARCHAR(100))) CallNote
FROM CallNote
JOIN Contact ON Contact.ID = CallNote.CONTACT_ID
JOIN Customer ON Customer.ID = Contact.CUSTOMER_ID
WHERE CallNote.Type = 'n' AND Customer.AcctClass >= '1'
) A
GROUP BY Name, CallNote
ORDER BY Name
我用 MSSQL 编写了以下查询:
Select customer.name,
max(callnote.ID),
CAST (callnote.NOTE as VARCHAR(100))
from callnote
join CONTACT
on
contact.ID=callnote.CONTACT_ID
join CUSTOMER
on
customer.ID=contact.CUSTOMER_ID
where callnote.TYPE='n' and CUSTOMER.AcctClass>='1'
group by customer.NAME, CAST (callnote.NOTE as VARCHAR(100))
order by customer.NAME
我希望每个客户名称只收到一条记录(最后一条记录)。 (789 行,当我将 'CAST (callnote.NOTE as VARCHAR(100))' 排除在查询之外时得到的)我得到的是每个联系人的最后一个注释(11,500 多行)。我绞尽脑汁好几个小时,重写了这么多次。客户 table 和 callnote table 之间没有公共列。我如何让它只显示每个客户的最后一条注释?
我假设你想要来自 max callnote id 的笔记中的笔记?所以像这样:
Select
C.name,
n.ID,
n.NOTE
from
CUSTOMER c
outer apply (
select top 1
callnote.ID,
CAST (callnote.NOTE as VARCHAR(100))
from
CONTACT
join callnote
on contact.ID=callnote.CONTACT_ID and callnote.TYPE='n'
where
c.ID=contact.CUSTOMER_ID
order by
callnote.ID desc) n
where
c.AcctClass>='1'
order by
c.NAME
所以这总是从该客户的最大 ID 中获取行。希望语法没问题,不能真正测试这个。
你能试试这个吗
SELECT Name, MAX(CallNoteID) CallNoteID, CallNote
FROM
(
SELECT Customer.Name,
CallNote.ID CallNoteID,
TRIM(CAST(CallNote.Note as VARCHAR(100))) CallNote
FROM CallNote
JOIN Contact ON Contact.ID = CallNote.CONTACT_ID
JOIN Customer ON Customer.ID = Contact.CUSTOMER_ID
WHERE CallNote.Type = 'n' AND Customer.AcctClass >= '1'
) A
GROUP BY Name, CallNote
ORDER BY Name