如何在sql server中在一行上添加柱基?
我有这张桌子如何在sql server中在一行上添加柱基?,sql,sql-server,Sql,Sql Server,我有这张桌子 Row Title Code RegDate Amount ---------------------------------------------------------- 1 typea 203170 1396/12/29 150760000000 --Eur 1 typea 203251 1396/12/29 169928736 --Usd 2 typeb 201310 1396/12/29 32794
Row Title Code RegDate Amount
----------------------------------------------------------
1 typea 203170 1396/12/29 150760000000 --Eur
1 typea 203251 1396/12/29 169928736 --Usd
2 typeb 201310 1396/12/29 32794373868351
3 typec 201441 1396/12/29 899750000
6 typed 201216 1396/12/29 23411268063599
8 typee 201181 1396/12/29 86687000 --Eur
8 typee 201211 1396/12/29 81483719480611 --Usd
9 typef 201212 1396/12/29 52595043810
10 typeh 201213 1396/12/29 3630924097
如何将第1行和第8行合并为一行,就像这样的结果
Row Title Code RegDate Amount Amount_Usd
----------------------------------------------------------
1 typea 203170 1396/12/29 150760000000 169928736
2 typeb 201310 1396/12/29 32794373868351 0
3 typec 201441 1396/12/29 899750000 0
6 typed 201216 1396/12/29 23411268063599 0
8 typee 201181 1396/12/29 86687000 81483719480611
9 typef 201212 1396/12/29 52595043810 0
10 typeh 201213 1396/12/29 3630924097 0
违约金额为欧元
谢谢你试试这个-
SELECT A.Row,A.Title,B.Code,A.RegDate,A.Amount,A.Amount_Usd FROM
(
SELECT Row,Title,RegDate,
ISNULL(SUM(CASE WHEN Code NOT IN (203251 ,201211) THEN Amount ELSE NULL END),0) Amount,
ISNULL(SUM(CASE WHEN Code IN (203251 ,201211) THEN Amount ELSE NULL END),0)Amount_Usd
FROM your_table
GROUP BY Row,Title,RegDate
)A
INNER JOIN your_table B
ON A.Row = B.Row and B.Code NOT IN (203251 ,201211)
您只需要在此处进行一些条件聚合:
--Sample Data
WITH VTE AS(
SELECT *
FROM (VALUES(1 ,'typea',203170,'1396/12/29',150760000000),
(1 ,'typea',203251,'1396/12/29',169928736),
(2 ,'typeb',201310,'1396/12/29',32794373868351),
(3 ,'typec',201441,'1396/12/29',899750000),
(6 ,'typed',201216,'1396/12/29',23411268063599),
(8 ,'typee',201181,'1396/12/29',86687000),
(8 ,'typee',201211,'1396/12/29',81483719480611),
(9 ,'typef',201212,'1396/12/29',52595043810),
(10 ,'typeh',201213,'1396/12/29',3630924097)) V([Row],Title,Code, RegDate, Amount))
--Solution
SELECT Row,
Title,
MIN(CASE WHEN Code NOT IN (203251,201211) THEN Code END) AS Code,
RegDate,
ISNULL(SUM(CASE WHEN Code NOT IN (203251,201211) THEN Amount END),0) AS Amount,
ISNULL(SUM(CASE WHEN Code IN (203251,201211) THEN Amount END),0) AS Amount_Usd
FROM VTE
GROUP BY [Row],[Title],RegDate;
不需要CTE,我的咖啡还没开始喝。你怎么知道哪个金额是欧元,哪个是美元?代码是203251,201211是美元,所有代码都是欧元81483719480611是巨大的金额。你的公司让初学者做编程?这是样本你试过了吗?它不符合OP的要求。数据库更新。在组中添加代码时出现了一些问题。你应该修正这个解释。它与查询不匹配。谢谢@GordonLinoff。我修改了SQL,但没有修改解释。