TheBảng điều khiển
Mô -đun bao gồm kèo bóng đá pháp chức năng khác nhau mà kèo bóng đá pháp bảng trả về (nghĩa là nhiều hàng). kèo bóng đá pháp chức năng này hữu ích cả theo đúng nghĩa của chúng và là ví dụ về cách viết kèo bóng đá pháp chức năng C trả về nhiều hàng.
Mô -đun này được coi làđáng tin cậyTạo
Đặc quyền trên cơ sở dữ liệu hiện tại.
Bảng F.30Tóm tắt kèo bóng đá pháp chức năng được cung cấp bởibảng
Mô -đun.
Bảng F.30.bảng
Chức năng
bình thường_rand
15626_15703
bình thường_rand
Sản xuất một tập hợp kèo bóng đá pháp giá trị ngẫu nhiên được phân phối bình thường (phân phối Gaussian).
numvals
là số lượng giá trị được trả về từ hàm.trung bình
là giá trị trung bình của phân phối giá trị bình thường vàSTDDEV
là độ lệch chuẩn của phân phối giá trị bình thường.
Ví dụ: cuộc gọi này yêu cầu 1000 giá trị có giá trị trung bình là 5 và độ lệch chuẩn là 3:
test =# Chọn * từ bình thường_rand (1000, 5, 3); bình thường_rand -------------------------- 1.56556322244898 9.10040991424657 5.36957140345079 -0.369151492880995 0.283600703686639 . . . 4.82992125404908 9.71308014517282 2.49639286969028 (1000 hàng)
crosstab (văn bản)
crosstab (văn bản SQL) crosstab (văn bản SQL, int n)
Thecrosstab
Hàm được sử dụng để sản xuấtPivotHiển thị, trong đó dữ liệu được liệt kê trên trang thay vì xuống. Ví dụ: chúng ta có thể có dữ liệu như
ROW1 Val11 Hàng1 Val12 Hàng1 Val13 ... ROW2 Val21 ROW2 Val22 ROW2 Val23 ...
mà chúng tôi muốn hiển thị như
ROW1 Val11 Val12 Val13 ... ROW2 Val21 Val22 Val23 ... ...
Thecrosstab
Hàm lấy tham số văn bản là truy vấn SQL tạo dữ liệu thô được định dạng theo cách đầu tiên và tạo kèo bóng đá pháp một bảng được định dạng theo cách thứ hai.
TheSQL
Tham số là một câu lệnh SQL tạo kèo bóng đá pháp bộ dữ liệu nguồn. Câu lệnh này phải trả về mộtROW_NAME
kèo bóng đá pháp, mộtthể loại
kèo bóng đá pháp và mộtgiá trị
kèo bóng đá pháp.n
là một tham số lỗi thời, bị bỏ qua nếu được cung cấp (trước đây là điều này phải khớp với số lượng kèo bóng đá pháp giá trị đầu ra, nhưng bây giờ được xác định bởi truy vấn gọi điện).
Ví dụ: truy vấn được cung cấp có thể tạo kèo bóng đá pháp một bộ một thứ như:
Giá trị mèo Row_Name ----------+-------+------- Hàng1 CAT1 Val1 Hàng1 CAT2 Val2 Hàng1 CAT3 Val3 Hàng1 cat4 val4 ROW2 CAT1 Val5 ROW2 CAT2 Val6 ROW2 CAT3 Val7 ROW2 cat4 val8
Thecrosstab
Hàm được tuyên bố trả lạiSetof Record
, Vì vậy, kèo bóng đá pháp tên và loại thực tế của kèo bóng đá pháp cột đầu ra phải được xác định trongtừ
mệnh đề của cuộc gọiChọn
Tuyên bố, ví dụ:
19022_19111
Ví dụ này tạo kèo bóng đá pháp một thứ gì đó như:
<== kèo bóng đá pháp giá trị == ROW_NAME CAGETORY_1 CAGETORY_2 ----------+------------+------------ Hàng1 val1 val2 Row2 Val5 Val6
Thetừ
mệnh đề phải xác định đầu kèo bóng đá pháp là mộtROW_NAME
kèo bóng đá pháp (cùng loại dữ liệu với kèo bóng đá pháp kết quả đầu tiên của truy vấn SQL) theo sau là ngiá trị
Cột (tất cả kèo bóng đá pháp loại dữ liệu giống như cột kết quả thứ ba của truy vấn SQL). Bạn có thể thiết lập nhiều cột giá trị đầu ra như bạn muốn. Tên của kèo bóng đá pháp cột đầu ra tùy thuộc vào bạn.
Thecrosstab
Hàm tạo kèo bóng đá pháp một hàng đầu kèo bóng đá pháp cho mỗi nhóm hàng đầu vào liên tiếp có cùngROW_NAME
Giá trị. Nó điền vào đầu kèo bóng đá phápgiá trị
kèo bóng đá pháp, từ trái sang phải, vớigiá trị
kèo bóng đá pháp trường từ kèo bóng đá pháp hàng này. Nếu có ít hàng hơn trong một nhóm hơn là có đầu ragiá trị
Cột, kèo bóng đá pháp cột đầu ra bổ sung được lấp đầy bằng null; Nếu có nhiều hàng hơn, kèo bóng đá pháp hàng đầu vào bổ sung sẽ bị bỏ qua.
Trong thực tế, truy vấn SQL phải luôn chỉ địnhĐặt hàng bằng 1,2
Để đảm bảo rằng kèo bóng đá pháp hàng đầu vào được đặt hàng đúng cách, nghĩa là kèo bóng đá pháp giá trị có cùngROW_NAME
được kết hợp với nhau và đặt hàng chính xác trong hàng. Lưu ý rằngcrosstab
Bản thân nó không chú ý đến cột thứ hai của kết quả truy vấn; Nó chỉ ở đó để được đặt hàng bởi, để kiểm soát thứ tự trong đó kèo bóng đá pháp giá trị cột thứ ba xuất hiện trên trang.
Đây là một ví dụ hoàn chỉnh:
Tạo bảng CT (id nối tiếp, văn bản rowid, văn bản thuộc tính, văn bản giá trị); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test1', 'ATT1', 'Val1'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test1', 'Att2', 'Val2'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test1', 'Att3', 'Val3'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test1', 'Att4', 'Val4'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test2', 'ATT1', 'Val5'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test2', 'Att2', 'Val6'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test2', 'Att3', 'Val7'); Chèn vào kèo bóng đá pháp giá trị CT (ROWID, Thuộc tính, Giá trị) ('Test2', 'Att4', 'Val8'); LỰA CHỌN * Từ crosstab ( 'Chọn RowID, Thuộc tính, Giá trị từ CT trong đó thuộc tính = '' att2 '' hoặc thuộc tính = '' att3 '' đặt hàng theo 1,2 ') Dưới dạng CT (ROW_NAME TEXT, CATELORY_1 TEXT, CATTORY_2 TEXT, CATETORY_3 TEXT); ROW_NAME | loại_1 | loại_2 | loại_3 ----------+------------+------------+------------ test1 | val2 | val3 | test2 | val6 | val7 | (2 hàng)
Bạn có thể tránh luôn phải viết kèo bóng đá pháptừ
mệnh đề để xác định kèo bóng đá pháp cột đầu ra, bằng cách thiết lập chức năng crosstab tùy chỉnh có loại hàng đầu ra mong muốn có dây vào định nghĩa của nó. Điều này được mô tả trong phần tiếp theo. Một khả năng khác là nhúng yêu cầutừ
mệnh đề trong định nghĩa xem.
Xem thêm\ crosstabview
lệnh trongPSQL, cung cấp chức năng tương tựcrosstab ()
.
crosstabn
(văn bản)
crosstabn
(văn bản SQL)
Thecrosstab
kèo bóng đá pháp chức năng là ví dụ về cách thiết lập trình bao bọc tùy chỉnh cho chungn
crosstab
Hàm, để bạn không cần ghi tên và loại kèo bóng đá pháp trong cuộc gọiChọn
Truy vấn. TheBảng
Mô -đun bao gồmcrosstab2
, crosstab3
vàcrosstab4
, có loại hàng đầu kèo bóng đá pháp được xác định là
Tạo loại TableFunc_Crosstab_n AS ( Row_name văn bản, Category_1 văn bản, Category_2 văn bản, . . . thể loại_n văn bản );
Do đó, kèo bóng đá pháp chức năng này có thể được sử dụng trực tiếp khi truy vấn đầu vào tạo raROW_NAME
vàgiá trị
kèo bóng đá pháp loạiText
và bạn muốn kèo bóng đá pháp cột giá trị đầu ra 2, 3 hoặc 4. Theo tất cả kèo bóng đá pháp cách khác, họ cư xử chính xác như được mô tả ở trên cho chungcrosstab
chức năng.
Ví dụ, ví dụ được đưa kèo bóng đá pháp trong phần trước cũng sẽ hoạt động như
Chọn * Từ crosstab3 ( 'Chọn RowID, Thuộc tính, Giá trị từ CT trong đó thuộc tính = '' att2 '' hoặc thuộc tính = '' att3 '' đặt hàng theo 1,2 ');
kèo bóng đá pháp chức năng này được cung cấp chủ yếu cho mục đích minh họa. Bạn có thể tạo kèo bóng đá pháp loại và chức năng trả về của riêng bạn dựa trên cơ bảncrosstab ()
Hàm. Có hai cách để làm điều đó:
Tạo một loại tổng hợp mô tả kèo bóng đá pháp cột đầu ra mong muốn, tương tự như kèo bóng đá pháp ví dụ trong25146_25184
. Sau đó xác định tên chức năng duy nhất chấp nhận mộtText
tham số và trả vềsetof your_type_name
, nhưng liên kết với cùng một cơ sởcrosstab
c Hàm. Ví dụ: nếu dữ liệu nguồn của bạn tạo tên hàng làText
và kèo bóng đá pháp giá trị làfloat8
và bạn muốn 5 kèo bóng đá pháp giá trị:
Tạo loại my_crosstab_float8_5_cols là ( văn bản my_row_name, my_c Category_1 float8, my_c Category_2 float8, my_c Category_3 float8, my_c Category_4 float8, my_carget_5 float8 ); Tạo hoặc thay thế hàm crosstab_float8_5_cols (văn bản) Trả về setof my_crosstab_float8_5_cols Như '$ libdir/pablefunc', 'crosstab' ngôn ngữ c ổn định;
sử dụngout
tham số để xác định loại trả về ngầm. Ví dụ tương tự cũng có thể được thực hiện theo cách này:
Tạo hoặc thay thế hàm crosstab_float8_5_cols ( Trong văn bản, OUT MY_ROW_NAME TEXT, OUT My_c Category_1 Float8, OUT My_c Category_2 Float8, OUT My_C Category_3 Float8, OUT My_c Category_4 float8, kèo bóng đá pháp my_carget_5 float8) Trả về bản ghi Setof Như '$ libdir/pablefunc', 'crosstab' ngôn ngữ c ổn định;
crosstab (văn bản, văn bản)
27001_27049
Giới hạn chính của dạng tham số đơn củacrosstab
là nó xử lý tất cả kèo bóng đá pháp giá trị trong một nhóm giống nhau, chèn mỗi giá trị vào cột có sẵn đầu tiên. Nếu bạn muốn kèo bóng đá pháp cột giá trị tương ứng với kèo bóng đá pháp loại dữ liệu cụ thể và một số nhóm có thể không có dữ liệu cho một số danh mục, điều đó không hoạt động tốt. Dạng hai tham số củacrosstab
Xử lý trường hợp này bằng cách cung cấp một danh sách rõ ràng kèo bóng đá pháp danh mục tương ứng với kèo bóng đá pháp cột đầu ra.
Source_SQL
là một câu lệnh SQL tạo kèo bóng đá pháp bộ dữ liệu nguồn. Câu lệnh này phải trả về mộtROW_NAME
kèo bóng đá pháp, mộtDanh mục
kèo bóng đá pháp và mộtgiá trị
kèo bóng đá pháp. Nó cũng có thể có một hoặc nhiềuExtraHồikèo bóng đá pháp. TheROW_NAME
kèo bóng đá pháp phải là đầu tiên. Thethể loại
vàgiá trị
kèo bóng đá pháp cột phải là hai cột cuối cùng, theo thứ tự đó. Bất kỳ cột nào giữaROW_NAME
vàthể loại
được coi làExtraHồi. TheMạnhExtrakèo bóng đá pháp cột dự kiến sẽ giống nhau cho tất cả kèo bóng đá pháp hàng có cùngROW_NAME
Giá trị.
Ví dụ,Source_SQL
Có thể tạo kèo bóng đá pháp một bộ một thứ như:
chọn hàng_name, Extra_col, Cat, giá trị từ thứ tự foo bằng 1; Row_name Extra_col Cat Value ----------+------------+-----+--------- ROW1 Extra1 Cat1 Val1 ROW1 Extra1 Cat2 Val2 ROW1 Extra1 Cat4 Val4 Row2 Extra2 Cat1 Val5 Row2 Extra2 Cat2 Val6 Row2 Extra2 Cat3 Val7 Row2 Extra2 Cat4 Val8
category_sql
là một câu lệnh SQL tạo ra tập hợp kèo bóng đá pháp danh mục. Câu lệnh này phải trả về chỉ một cột. Nó phải tạo ra ít nhất một hàng, hoặc một lỗi sẽ được tạo ra. Ngoài ra, nó không được tạo ra kèo bóng đá pháp giá trị trùng lặp hoặc một lỗi sẽ được tạo ra.category_sql
có thể là một cái gì đó như:
Chọn con mèo khác biệt với thứ tự foo bằng 1; con mèo ------- CAT1 CAT2 CAT3 Cat4
Thecrosstab
Hàm được tuyên bố trả lạiSETOF Record
, Vì vậy, kèo bóng đá pháp tên và loại thực tế của kèo bóng đá pháp cột đầu ra phải được xác định trongtừ
mệnh đề của cuộc gọiChọn
Câu lệnh, ví dụ:
Chọn * từ crosstab ('...', '...') Như CT (ROW_NAME TEXT, Text Text, Cat1 Text, Cat2 Text, Cat3 Text, Cat4 Text);
Điều này sẽ tạo kèo bóng đá pháp kết quả như:
<== kèo bóng đá pháp giá trị == Row_Name Extra Cat1 Cat2 Cat3 Cat4 ---------+-------+------+------+------+------ ROW1 Extra1 Val1 Val4 Row2 Extra2 Val5 Val6 Val7
Thetừ
mệnh đề phải xác định số lượng cột đầu ra thích hợp của kèo bóng đá pháp loại dữ liệu thích hợp. Nếu cón
kèo bóng đá pháp trongSource_SQL
Kết quả của truy vấn, đầu tiênn
-2 trong số chúng phải khớp với lần đầu tiênn
-2 Cột đầu ra. kèo bóng đá pháp cột đầu ra còn lại phải có loại cột cuối cùng củaSource_SQL
Kết quả của Truy vấn và phải có chính xác như nhiều trong số chúng có hàng trongcategory_sql
Kết quả của truy vấn.
Thecrosstab
Hàm tạo kèo bóng đá pháp một hàng đầu kèo bóng đá pháp cho mỗi nhóm hàng đầu vào liên tiếp có cùngROW_NAME
Giá trị. Đầu kèo bóng đá phápROW_NAME
kèo bóng đá pháp, cộng với bất kỳMạnhExtraHồikèo bóng đá pháp, được sao chép từ hàng đầu tiên của nhóm. Đầu ragiá trị
kèo bóng đá pháp cột được lấp đầy bằnggiá trị
kèo bóng đá pháp trường từ kèo bóng đá pháp hàng có khớpDanh mục
Giá trị. Nếu một hàngthể loại
Không phù hợp với bất kỳ đầu kèo bóng đá pháp nào củacategory_sql
Truy vấn, nógiá trị
bị bỏ qua. kèo bóng đá pháp cột đầu ra có danh mục phù hợp không có trong bất kỳ hàng đầu vào nào của nhóm được lấp đầy bằng nulls.
Trong thực tếSource_SQL
Truy vấn phải luôn chỉ địnhĐặt hàng bằng 1
Để đảm bảo rằng kèo bóng đá pháp giá trị có cùngROW_NAME
được kết hợp với nhau. Tuy nhiên, việc đặt hàng kèo bóng đá pháp danh mục trong một nhóm không quan trọng. Ngoài ra, điều cần thiết là phải chắc chắn rằng thứ tự củacategory_sql
Đầu ra của truy vấn phù hợp với thứ tự kèo bóng đá pháp đầu ra được chỉ định.
Đây là hai ví dụ hoàn chỉnh:
Tạo doanh số bán bảng (năm int, tháng int, qty int); chèn vào giá trị bán hàng (2007, 1, 1000); chèn vào giá trị bán hàng (2007, 2, 1500); chèn vào giá trị bán hàng (2007, 7, 500); chèn vào giá trị bán hàng (2007, 11, 1500); chèn vào giá trị bán hàng (2007, 12, 2000); chèn vào giá trị bán hàng (2008, 1, 1000); Chọn * Từ Crosstab ( 'Chọn năm, tháng, QTY từ đơn đặt hàng bán hàng bằng 1', 'Chọn M từ Generate_Series (1,12) m' ) BẰNG ( năm int, "Jan" int, "Feb" int, "Mar" int, "APR" int, "May" int, "Jun" int, "Jul" int, "Aug" int, "Sep" int, "OCT" int, "Nov" int, "Dec" int ); năm | Jan | Tháng 2 | MAR | APR | Tháng 5 | Jun | Tháng 7 | Tháng 8 | Tháng 9 | Tháng 10 | Tháng 11 | Tháng mười hai ------+------+------+-----+-----+-----+-----+-----+-----+-----+-----+------+------ 2007 | 1000 | 1500 | | | | | 500 | | | | 1500 | 2000 2008 | 1000 | | | | | | | | | | | (2 hàng)
33584_34844
Bạn có thể tạo kèo bóng đá pháp chức năng được xác định trước để tránh phải ghi ra tên và loại cột kết quả trong mỗi truy vấn. Xem kèo bóng đá pháp ví dụ trong phần trước. Hàm C bên dưới cho dạng này củacrosstab
được đặt têncrosstab_hash
.
Connectby
35508_35671
TheConnectby
Hàm tạo ra màn hình hiển thị dữ liệu phân cấp được lưu trữ trong bảng. Bảng phải có một trường chính xác định duy nhất kèo bóng đá pháp hàng và trường cha mẹ tham chiếu cha mẹ (nếu có) của mỗi hàng.Connectby
Có thể hiển thị cây con rơi xuống từ bất kỳ hàng nào.
Bảng F.31Giải thích kèo bóng đá pháp tham số.
Bảng F.31.Connectby
tham số
tham số | Mô tả |
---|---|
Relname |
Tên của mối quan hệ nguồn |
keyid_fld |
Tên của trường chính |
Parent_Keyid_FLD |
Tên của trường cha mẹ |
OrderBy_FLD |
Tên của trường để đặt hàng anh chị em theo (tùy chọn) |
start_with |
Giá trị khóa của hàng để bắt đầu tại |
MAX_DEPTH |
Độ sâu tối đa để hạ xuống hoặc bằng không cho độ sâu không giới hạn |
cành_delim |
Chuỗi để tách kèo bóng đá pháp phím với đầu ra nhánh (tùy chọn) |
kèo bóng đá pháp trường khóa và khóa phụ huynh có thể là bất kỳ loại dữ liệu nào, nhưng chúng phải là cùng một loại. Lưu ý rằngstart_with
Giá trị phải được nhập dưới dạng chuỗi văn bản, bất kể loại trường chính.
TheConnectby
Hàm được tuyên bố trả lạiSetof Record
, Vì vậy, kèo bóng đá pháp tên và loại thực tế của kèo bóng đá pháp cột đầu ra phải được xác định trongtừ
mệnh đề gọiChọn
Câu lệnh, ví dụ:
38717_38884
Hai kèo bóng đá pháp đầu ra đầu tiên được sử dụng cho phím hàng hiện tại và phím hàng của nó; Họ phải khớp với loại trường chính của bảng. kèo bóng đá pháp đầu ra thứ ba là độ sâu trong cây và phải loạiSố nguyên
. Nếu acành_delim
Tham số đã được đưa ra, kèo bóng đá pháp đầu ra tiếp theo là màn hình nhánh và phải thuộc loạiText
. Cuối cùng, nếu mộtOrderBy_FLD
Tham số đã được đưa ra, kèo bóng đá pháp đầu ra cuối cùng là số sê -ri và phải thuộc loạiSố nguyên
.
ThecànhCột đầu ra hiển thị đường dẫn của kèo bóng đá pháp phím được thực hiện để đạt được hàng hiện tại. kèo bóng đá pháp khóa được phân tách bằng được chỉ địnhcành_delim
Chuỗi. Nếu không có hiển thị chi nhánh nào, hãy bỏ qua cảcành_delim
Tham số và kèo bóng đá pháp nhánh trong danh sách kèo bóng đá pháp đầu ra.
Nếu thứ tự của anh chị em cùng cha mẹ là quan trọng, bao gồmOrderBy_FLD
Tham số để chỉ định trường nào để đặt hàng anh chị em. Trường này có thể thuộc bất kỳ loại dữ liệu có thể sắp xếp. Danh sách kèo bóng đá pháp đầu ra phải bao gồm kèo bóng đá pháp nối số số tiếp số nguyên cuối cùng, nếu và chỉ khiOrderBy_FLD
được chỉ định.
kèo bóng đá pháp tham số đại diện cho kèo bóng đá pháp tên bảng và trường được sao chép AS-IS vào kèo bóng đá pháp truy vấn SQL màConnectby
Tạo nội bộ. Do đó, bao gồm kèo bóng đá pháp trích dẫn kép nếu kèo bóng đá pháp tên là trường hợp hỗn hợp hoặc chứa kèo bóng đá pháp ký tự đặc biệt. Bạn cũng có thể cần phải trình độ Schema-đủ điều kiện.
Trong kèo bóng đá pháp bảng lớn, hiệu suất sẽ kém trừ khi có chỉ mục trên trường cha mẹ.
Điều quan trọng làcành_delim
Chuỗi không xuất hiện trong bất kỳ giá trị khóa nào, khácConnectby
Có thể báo cáo không chính xác một lỗi thu nhận vô hạn. Lưu ý rằng nếucành_delim
không được cung cấp, giá trị mặc định của~
được sử dụng cho mục đích phát hiện đệ quy.
Đây là một ví dụ:
41194_44010
Joe Conway
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.