如何只显示一行

时间:2018-07-02 13:27:07

标签: sql-server

我有这个表结构和示例数据。我只想获取一行数据。但是相反,它给了我等于子记录的行。

--DROP TABLE [Detail];
--DROP TABLE [Master];

--CREATE TABLE [Master]
--(
--ID INT NOT NULL PRIMARY KEY,
--Code VARCHAR(25)
--);

--INSERT INTO [Master] VALUES (1, 'CASH');
--INSERT INTO [Master] VALUES (2, 'CASH');

--CREATE TABLE [Detail]
--(
--ID INT NOT NULL PRIMARY KEY,
--MasterID INT,
--DrAmount Numeric,
--CrAmount Numeric,
--CONSTRAINT FK_MASTER FOREIGN KEY (MasterID)
--REFERENCES [Master](ID)
--);

--INSERT INTO [Detail] VALUES (1, 1, '2200', NULL);
--INSERT INTO [Detail] VALUES (2, 1, NULL, '3200');
--INSERT INTO [Detail] VALUES (3, 1, '1000', NULL);
--INSERT INTO [Detail] VALUES (4, 2, NULL, '3200');
--INSERT INTO [Detail] VALUES (5, 2, '3200', NULL);

这是查询和结果:

SELECT [MASTER].[Code], [DETAIL].[MasterID], [DETAIL].[CrAmount]
FROM [MASTER], [DETAIL]
WHERE [MASTER].[ID] = [DETAIL].[MasterID]

1 个答案:

答案 0 :(得分:1)

看起来您需要GROUP BY,就像@HoneyBadger所建议的那样,最好使用现代的显式联接语法-更加清楚:

select m.code, d.masterid, sum(d.cramount) amount
from [master] m 
     join[detail] d on m.[id] = d.[masterid]
group by m.code, d.masterid

结果:

code   masterid  amount
CASH    1         3200
CASH    2         3200