当连接导致数字出错时,如何计算特定列中的第一个首字母?

问题描述 投票:0回答:1

我查询了练习数据库,并想出了一些我想从数据库中看到的内容。

我写了一个查询,给出了我姓氏的第一个首字母、平均工资、总工资和该首字母的数量。

SELECT      Left(Achternaam, 1) as '1e_Initiaal_Achternaam',
            cast(avg(Salaris) as Int) AS 'Gem. Salaris',
            round(cast(sum(Salaris) as Int),0) as 'Salaris',
            Count(Left(Achternaam, 1))
FROM        Werknemer
GROUP BY    Left(Achternaam, 1)
ORDER BY    Left(Achternaam, 1);

到目前为止一切都很好,一切都如我所愿。

但是后来我想更进一步,将收入/营业额添加到概述中,给它一个很好的概述,这在现实中完全无用,但这在这种情况下并不重要:

SELECT      Left(Achternaam, 1) as '1e_Initiaal_Achternaam',
            cast(avg(Salaris) as Int) AS 'Gem. Salaris',
            round(cast(sum(Salaris) as Int),0) as 'Salaris',
            Count(Left(Achternaam, 1)) as 'Eerste letter achternaam',
            sum(orderbedrag) as 'Order Waarde',
            sum(orderbedrag) / round(cast(sum(Salaris) as Int),0) as 'omzet per € salaris'
FROM        Werknemer
LEFT JOIN   Orders
On          werknemer.WerknemerID = orders.WerknemerID
GROUP BY    Left(Achternaam, 1)
ORDER BY    Left(Achternaam, 1);

所以我得到了我的观点,但是由于加入,first_initial(Eerste letter achternaam)不再正确。现在,每个“Acternaam”在数据中的含量要高得多,因为我加入了订单数据。

我怎样才能保留第一个初始计数和加入数据?我以为我必须使用子查询,但我无法做到正确。我尝试按照 w3schools.com 教程中的步骤在子查询中使用 unique 函数。

sql sql-server join count distinct
1个回答
0
投票

有很多方法,但这里有一种方法,按原样创建第一个输出,将其视为派生表,然后添加一些子选择。

SELECT A.[1e_Initiaal_Achternaam],
       A.[Gem. Salaris], 
       A.[Salaris],
       A.[Count],
       (SELECT sum(orderbedrag) 
          FROM Orders WHERE A.WerknemerID = WerknemerID ) as [Order Waarde],
       (SELECT sum(orderbedrag) / round(cast(A.Salaris as Int),0)
          FROM Orders WHERE A.WerknemerID = WerknemerID ) as [Salaris2]

来自 (

SELECT      WerknemerID,
            Left(Achternaam, 1) as '1e_Initiaal_Achternaam',
            cast(avg(Salaris) as Int) AS 'Gem. Salaris',
            round(cast(sum(Salaris) as Int),0) as 'Salaris',
            Count(Left(Achternaam, 1)) as 'Count'
FROM        Werknemer
GROUP BY    WerknemerID, Left(Achternaam, 1)
ORDER BY    Left(Achternaam, 1)
) AS A

创建了一个名为 A 的派生表,连接到它并进行聚合。

© www.soinside.com 2019 - 2024. All rights reserved.