我想通过查询来编写组,其中我只想要一次相同的值吗?
我的查询
SELECT NAME, SUM(SALARY) FROM CUSTOMERS GROUP BY NAME;
输出:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Ramesh | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | kaushik | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Hardik | 22 | MP | 4500.00 |
| 7 | Hardik | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
预期产出:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | | 22 | MP | 4500.00 |
| 7 | | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
答案 0 :(得分:1)
您可以使用如下的row_number:
Select Id, Case when (row_number() over (partition by Name order by Id) = 1) then [Name] else NULL end as [Name], Age, Address, Salary
from yourtable
答案 1 :(得分:0)
首先,如果是UI用户,通常最好在UI中操作数据以按照您想要的方式显示。
此外,您的结果集甚至不是group by Name
子句的结果。如果没有某种Age, Address, Id
或aggregation
?
max min
无论如何,如果你想按照你在问题中所表达的方式来实现它,那么实现的方法之一就是:
CREATE TABLE #myTable
(Id INT, FullName VARCHAR(200) NULL, age INT, salary DECIMAL);
INSERT INTO #myTable (Id, FullName, age, salary)
VALUES (1, 'anc', 5, 1500),
(2, 'anc', 15, 1000),
(3, 'defc', 25, 12000),
(4, 'defc', 45, 15000);
--mark with row_number and load into a temp table
SELECT mt.Id,
mt.FullName,
mt.age,
mt.salary,
ROW_NUMBER() OVER (PARTITION BY mt.FullName ORDER BY mt.age) AS RowNum
INTO #t1
FROM #myTable AS mt;
-- update any non-first row
UPDATE t
SET t.FullName = NULL
FROM #t1 AS t
WHERE t.RowNum != 1;
--select from tempTable
SELECT t.Id,
t.FullName,
t.age,
t.salary
FROM #t1 AS t;
答案 2 :(得分:0)
这实际上非常简单 - SQL Server支持LAG
,它访问上一行。所以,您只需要说“当最后一行的名称与此行的名称相同时,请将名称留空 - 否则,请使用名称”:
SELECT CASE WHEN LAG(Name) OVER(ORDER BY ID) = Name THEN '' ELSE Name END AS [Name],
Age,
Address,
SUM(SALARY) AS [Salary]
FROM Customers
GROUP BY Name, Age, Address
另外,如您所见,您需要在GROUP BY
子句中包含非聚合函数的所有列 - 因此您需要添加Age
和Address