Php mysql chuyển hàng thành cột

Tôi đã trả lời rất nhiều câu hỏi xoay vòng về MySQL trên Stack Overflow và một số câu hỏi về Quản trị viên cơ sở dữ liệu và đã học được một số điều về cách chuyển đổi dữ liệu trong MySQL

Thật không may, MySQL không có hàm

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
6, vì vậy để xoay dữ liệu từ hàng thành cột, bạn sẽ phải sử dụng biểu thức
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
7 cùng với hàm tổng hợp

Hãy thiết lập một số dữ liệu mẫu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];

Chúng tôi có thể dễ dàng truy vấn dữ liệu đại diện, bán hàng và sản phẩm bằng cách nối các bảng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
select 
  r.rep_name,
  p.prod_name,
  s.sale_date,
  s.quantity
from reps r
inner join sales s
  on r.rep_id = s.rep_id
inner join products p
  on s.prod_id = p.prod_id

Điều này sẽ cung cấp cho chúng tôi dữ liệu ở định dạng

REP_NAMEPROD_NAMESALE_DATEQUANTITYJohnShoes, ngày 16 tháng 5 năm 2013 00. 00. 00+000020JohnShoesTháng sáu, 19 2013 00. 00. 00+00002JohnPantsTháng Bảy, 03 2013 00. 00. 00+00005JohnShirtTháng 8, 22 2013 00. 00. 00+000027

Nhưng nếu chúng ta muốn xem đại diện trong các hàng riêng biệt với tổng số sản phẩm đã bán trong mỗi cột thì sao?. Đây là lúc chúng ta cần triển khai hàm

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
6 bị thiếu, vì vậy chúng ta sẽ sử dụng hàm tổng hợp
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
9 với logic điều kiện để thay thế

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
select 
  r.rep_name,
  sum[case when p.prod_name = 'Shoes' then s.quantity else 0 end] as Shoes,
  sum[case when p.prod_name = 'Pants' then s.quantity else 0 end] as Pants,
  sum[case when p.prod_name = 'Shirt' then s.quantity else 0 end] as Shirt
from reps r
inner join sales s
  on r.rep_id = s.rep_id
inner join products p
  on s.prod_id = p.prod_id
group by r.rep_name;

Logic có điều kiện của biểu thức

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
7 kết hợp với hàm tổng hợp để chỉ lấy tổng số
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1 mà bạn muốn trong mỗi cột. Vì chúng tôi có 3 sản phẩm, nên bạn sẽ viết 3 biểu thức
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
2 cho mỗi cột. Truy vấn này sẽ cho kết quả là

REP_NAMESHOESSPANTSSHIRTJoe1914813John22527Sally8923650

Điều này có thể dễ dàng được viết lại để hiển thị các đại diện trong mỗi cột và các sản phẩm trong các hàng

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
3____14

Và bây giờ dữ liệu là

PROD_NAMEJOHNSALLYJOEBOBPQuần5231480Áo sơ mi27650130Giày2289190

Như bạn có thể thấy, đây là một cách khá đơn giản và dễ dàng để chuyển đổi hàng thành cột khi bạn có số lượng giá trị hạn chế. Chúng tôi chỉ có 3 sản phẩm và 4 đại diện, vì vậy chúng tôi không có nhiều mã để viết. Mọi thứ trở nên phức tạp hơn một chút khi chúng ta có số lượng cột không xác định để chuyển đổi. Nếu bạn không biết trước các giá trị, thì bạn sẽ cần xem xét sử dụng câu lệnh đã chuẩn bị cùng với SQL động

Khi sử dụng một câu lệnh đã chuẩn bị, bạn sẽ viết một chuỗi sql sau đó sẽ được thực thi bởi máy chủ. Tôi luôn khuyên bạn nên viết một phiên bản truy vấn được mã hóa cứng trước khi cố gắng viết bất kỳ thứ gì một cách linh hoạt. Điều này sẽ cho phép bạn hiểu đúng logic trước khi thực hiện với SQL động

Hãy thiết lập truy vấn động bằng cách sử dụng dữ liệu ở trên. Bạn cần báo cáo tổng số lượng mặt hàng được bán bởi mỗi đại diện cho mỗi tháng/năm kết hợp. Một lần nữa, điều này thật dễ dàng nếu bạn chỉ có một vài ngày, bạn sẽ viết truy vấn

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
5
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
6

Bạn sẽ nhận được

REP_NAME2013-THÁNG 1 năm 2013-THÁNG 2 năm 2013-THÁNG 3 năm 2013-THÁNG 4 năm 2013-THÁNG 5Joe1901310John000020Sally150230089

Nhưng điều gì sẽ xảy ra nếu bạn không biết trước ngày tháng hoặc bạn muốn chuyển một số tham số nhất định để lọc ngày và làm cho báo cáo linh hoạt. Đây là nơi cần SQL động. Để tạo chuỗi sql để thực thi, trước tiên bạn cần lấy danh sách đầy đủ các ngày từ bảng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
3 của mình. Danh sách này sẽ được tạo bằng cách sử dụng và

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
0
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
1

Mã này tạo danh sách đầy đủ tất cả các ngày bên trong biểu thức

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
7 và hàm tổng hợp

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
2____03

Bây giờ, mã đầy đủ của bạn sử dụng câu lệnh đã chuẩn bị sẽ là

create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
4
create table products
[
  prod_id int not null,
  prod_name varchar[50] not null,
  primary key [prod_id]
];  

insert into products [prod_id, prod\name]
values [1, 'Shoes'], [2, 'Pants'], [3, 'Shirt'];

create table reps
[
  rep_id int not null,
  rep_name varchar[50] not null,
  primary key [rep_id]
];

insert into reps [rep_id, rep_name]
values [1, 'John'], [2, 'Sally'], [3, 'Joe'], [4, 'Bob'];

create table sales
[
  prod_id INT NOT NULL,
  rep_id INT NOT NULL,
  sale_date datetime not null,
  quantity int not null,
  PRIMARY KEY [prod_id, rep_id, sale_date],
  FOREIGN KEY [prod_id] REFERENCES products[prod_id],
  FOREIGN KEY [rep_id] REFERENCES reps[rep_id]
];

insert into sales [prod_id, rep_id, sale_date, quantity]
values 
  [1, 1, '2013-05-16', 20],
  [1, 1, '2013-06-19', 2],
  [2, 1, '2013-07-03', 5],
  [3, 1, '2013-08-22', 27],
  [3, 2, '2013-06-27', 500],
  [3, 2, '2013-01-07', 150],
  [1, 2, '2013-05-01', 89],
  [2, 2, '2013-02-14', 23],
  [1, 3, '2013-01-29', 19],
  [3, 3, '2013-03-06', 13],
  [2, 3, '2013-04-18', 1],
  [2, 3, '2013-08-03', 78],
  [2, 3, '2013-07-22', 69];
5

Cái nào mang lại cho

REP_NAME2013-JANUARY2013-FEBRUARY2013-MARCH2013-TH42013-MAY2013-THÁNG 62013-THÁNG 72013-THÁNG 8Joe190131006978John0000202527Sally15023008950000

Trong một vài dòng mã, bạn đã có một giải pháp linh hoạt trả về bất kỳ số lượng cột nào

Một lưu ý về

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
4, MySQL có độ dài mặc định trên một biến hệ thống được sử dụng để nối. Biến hệ thống được gọi và giá trị mặc định là 1024, có nghĩa là nếu bạn có một chuỗi dài hơn 1024, thì bạn sẽ cần thay đổi biến này để cho phép chuỗi dài hơn

Chủ Đề