There was a time when I wanted to give up blogger because poor code formating options.
Google to the rescue:
There was a time when I wanted to give up blogger because poor code formating options.
Google to the rescue:
CREATE TABLE CUSTOMER
(
ID INTEGER NOT NULL,
FIRSTNAME VARCHAR NOT NULL,
LASTNAME VARCHAR NOT NULL
);
CREATE TABLE CARD
(
ID INTEGER NOT NULL,
CUSTOMERID INTEGER,
SOMEDATA VARCHAR DEFAULT 'ffff'
);
insert into card (id, customerid, somedata)
values (1, null, 'abcd');
insert into card (id, customerid, somedata)
values (2, null, 'efgh');
insert into card (id, customerid, somedata)
values (3, null, 'ijkl');
insert into customer (id, firstname, lastname)
values (1, 'John', 'Doe');
insert into customer (id, firstname, lastname)
values (2, 'Jane', 'Doe');
insert into customer (id, firstname, lastname)
values (3, 'Jim', 'Doe');
update card set customerid = 1 where id = 2;
SELECT
MIN (customer.ID)
FROM customer
WHERE customer.ID NOT IN
(SELECT customerId FROM card WHERE customerId IS NOT NULL)
-- Simple table
CREATE TABLE Emp
(
dept VARCHAR2(20) NOT NULL,
nick VARCHAR2(20) NOT NULL,
pay NUMBER NOT NULL
);
-- All with different pays
INSERT INTO Emp
(dept, nick, pay)VALUES
('Admins' ,'Mike' ,5000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Admins' ,'Michael' ,4000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Admins' ,'Wellington' ,3000 );
-- First two with same pay checks
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Programers' ,'Bix' ,5000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Programers' ,'Pierre' ,5000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Programers' ,'Ivanhoehoe' ,3000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Programers' ,'Boldrick' ,2000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('Programers' ,'Payson' ,1000 );
-- 3. and 4. with same checks
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('CEOs' ,'Maush' ,50000);
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('CEOs' ,'Pierre' ,4000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('CEOs' ,'Bob' ,3000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('CEOs' ,'Boldrick' ,3000 );
INSERT INTO Emp
(dept ,nick ,pay) VALUES
('CEOs' ,'Vlax' ,1000 );
SELECT dept, nick, pay,
row_number() over (partition by dept ORDER BY pay desc) rnum,
rank() over (partition by dept ORDER BY pay desc) rnk,
dense_rank() over (partition by dept ORDER BY pay desc) densrnk
FROM Empdept nick pay RNUM RNK DENSRNK;
Admins | Mike | 5,000 | 1 | 1 | 1 |
Admins | Michael | 4,000 | 2 | 2 | 2 |
Admins | Wellington | 3,000 | 3 | 3 | 3 |
CEOs | Maush | 50,000 | 1 | 1 | 1 |
CEOs | Pierre | 4,000 | 2 | 2 | 2 |
CEOs | Bob | 3,000 | 3 | 3 | 3 |
CEOs | Boldrick | 3,000 | 4 | 3 | 3 |
CEOs | Vlax | 1,000 | 5 | 5 | 4 |
Programers | Bix | 5,000 | 1 | 1 | 1 |
Programers | Pierre | 5,000 | 2 | 1 | 1 |
Programers | Ivanhoe | 3,000 | 3 | 3 | 2 |
Programers | Boldrick | 2,000 | 4 | 4 | 3 |
Programers | Payson | 1,000 | 5 | 5 | 4 |
LEAD/LAG
-- LEAD/LAG
SELECT dept, nick, pay,
LEAD(pay, 1, 0) OVER (PARTITION BY dept ORDER BY pay DESC NULLS LAST) NEXT_LOWER_SAL,
LAG(pay, 1, 0) OVER (PARTITION BY dept ORDER BY pay DESC NULLS LAST) PREV_HIGHER_SAL
FROM Emp
ORDER BY dept, pay DESC;dept nick pay NEXT_LOWER_SAL PREV_HIGHER_SAL
-- FIRST_VALUE/LAST_VALUE
SELECT nick, dept, pay - FIRST_VALUE(pay)
OVER (PARTITION BY dept ORDER BY pay DESC) pay_GAP
FROM Emp
ORDER BY dept, pay_GAP DESCnick dept pay_GAP
--FIRST/LAST
SELECT dept,
nick,
pay,
MIN(pay) KEEP (DENSE_RANK FIRST ORDER BY pay) OVER (PARTITION BY dept) "Lowest",
MAX(pay) KEEP (DENSE_RANK LAST ORDER BY pay) OVER (PARTITION BY dept) "Highest"
FROM Emp
ORDER BY dept, pay;dept nick pay Lowest Highest
public class CustomJasperDataSource implements JRDataSource {
MyObjectInMyTableClass chartEntry;
Iterator iterator;
ArrayList chartEntries;
public CustomJasperDataSource(ArrayList chartEntries) {
this.chartEntries = chartEntries;
iterator = chartEntries.iterator();
}
public Object getFieldValue(JRField jrField) throws JRException {
if (jrField.getName().equalsIgnoreCase("myObjectAttribute1")) {
return chartEntry.getMyObjectAttribute1();
}
if (jrField.getName().equalsIgnoreCase("myObjectAttribute2")){
return chartEntry.getMyObjectAttribute2();
}
...
return null;
}
public boolean next() throws JRException {
boolean hasNext = iterator.hasNext();
if (hasNext) {
chartEntry = (MyObjectInMyTableClass) iterator.next();
}
return hasNext;
}
}
protected void jButtonCreatePdfActionPerformed(ActionEvent e) {
JasperPrint jp = generateReport(myArrayListOfData);
JasperViewer jasperViewer = new JasperViewer(jp, false);
jasperViewer.setVisible(true);
}
private JasperPrint generateReport(ArrayList data) {
JasperPrint jasperPrint = null;
String templateName = "MyTemplateName.jasper";
try {
jasperPrint = JasperFillManager.fillReport(templateName,
new HashMap(), new CustomJasperDataSource(data));
} catch (JRException e) {
doSOmeExcCatching();
}
return jasperPrint;
}