iT邦幫忙

1

有關新手SQL問題一問

想請教
如果有二個資料表
A表的資料欄位為
Store_ID (ID)
Store_Name (店名)
Sales (銷售額)
Txn_Dat (日期)
B表的資料欄位為
Region_Name (區域)
Store_Name (店名)

我想要將A表合併B表
顯示出各區域店家的總銷售額
Region_Name,Store_Name,Sales
但因為A表與B表
不管是用left,right,inner或full
Store_Name都會是呈現出二個相同欄位(因AB表都有)
所以如果用group by來做合併
就無法使用Store_Name來做合併點
請問我的語法該怎麼下才能解決問題

你有沒有覺得你的table 設計有問題?
rogeryao iT邦大師 1 級 ‧ 2021-11-04 15:38:37 檢舉
怪怪的結構......
1
rogeryao
iT邦大師 1 級 ‧ 2021-11-04 15:35:45
最佳解答
CREATE TABLE A (
Store_ID nvarchar(20),   -- (ID)
Store_Name nvarchar(20), -- (店名)
Sales int,               -- (銷售額)
Txn_Dat nvarchar(20)     -- (日期) 
);

INSERT INTO A (Store_ID,Store_Name,Sales,Txn_Dat)
VALUES 
('1','x',10,'2021/10/01'),
('2','x',20,'2021/10/02'),
('3','y',50,'2021/10/03');
CREATE TABLE B (
Region_Name nvarchar(20),   -- (區域)
Store_Name nvarchar(20)     -- (店名)
);

INSERT INTO B (Region_Name,Store_Name)
VALUES 
('M','x'),
('K','y'),
('G','Z');
SELECT B.Region_Name,P.Store_Name,ISNULL(P.Sales,0) AS Sales
FROM B
LEFT JOIN (
SELECT A.Store_Name,SUM(Sales) AS Sales
FROM A
GROUP BY A.Store_Name) AS P ON B.Store_Name=P.Store_Name 

Demo

2
純真的人
iT邦大師 1 級 ‧ 2021-11-04 15:05:29

你忘記可以設定別名@@..

a.Store_Name as A_Store_Name
b.Store_Name as B_Store_Name

1
huahualiu
iT邦新手 3 級 ‧ 2021-11-04 15:08:38

相同名稱處理方式就是加前綴
簡單例子:

SELECT a.[store_Name], b.[store_Name]
FROM [table_1] AS a, [table_2] AS b
0
jason
iT邦新手 4 級 ‧ 2021-11-04 15:39:49
create table A(
  Store_ID int not null,
  Store_Name varchar(50),
  Sales varchar(20),
  Txn_Date Datetime
  );

  create table B(
  Region_Name varchar(100),
  Store_Name varchar(50),
  );

  insert into A
  VALUES ('1', 'A_Shop', 'A_Sales', getdate()),
  ('2', 'B_Shop', 'B_Sales', '2021-10-10'),
  ('3', 'C_Shop', 'C_Sales', '2021-11-11')

  insert into B
  VALUES ('台北', 'A_Shop'),
  ('台中', 'B_Shop'),
  ('高雄', 'C_Shop')

  select b.Region_Name, a.Store_Name, a.Sales
  from a join b on a.Store_Name = b.Store_Name
2
Yaowen
iT邦新手 3 級 ‧ 2021-11-04 15:47:25

你的資料表結構怪怪的

正常會是

門市資料表 store
Store_ID (門市代碼) key
Store_Name (店名)
Region_Name (區域)

交易資料表 sell
Store_ID (門市代碼) key
SellSno (交易單號) key
Total (交易金額)
Txn_Dat (交易日期)
Txn_Time (交易時間)

   select  A.Store_ID ,B.Store_Name,B.Region_Name ,Sum(A.Total) As Sales from  sell  As A
   left join store As B
   on A.Store_ID = B.Store_ID
   GROUP BY A.Store_ID
1
Darwin Watterson
iT邦研究生 1 級 ‧ 2021-11-04 16:06:06

同意樓上

-----你的

A表:
Store_ID (ID)
Store_Name (店名)
Sales (銷售額)
Txn_Dat (日期)

B表:
Region_Name (區域)
Store_Name (店名)

這樣的缺點就是遇到『同店名,不同老闆的銷售額要怎麼區分?/images/emoticon/emoticon19.gif

就跟客戶資料為什麼要用身分證字號來當key值一樣
因為身分證字號是唯一的,同名同姓的人太多了。

0
madwrld
iT邦新手 5 級 ‧ 2021-11-16 01:55:41

你直接group by store name跟region name 不行嗎?反正就是看不同區域的分店銷售總額

我要發表回答

立即登入回答