fork download
  1. CREATE TABLE t1 (
  2. key TEXT PRIMARY KEY NOT NULL,
  3. name TEXT NOT NULL UNIQUE
  4. );
  5. INSERT INTO t1 (key, name) VALUES ('t1_key1', 't1_name1');
  6. INSERT INTO t1 (key, name) VALUES ('t1_key2', 't1_name2');
  7.  
  8. CREATE TABLE t2 (
  9. key TEXT PRIMARY KEY NOT NULL,
  10. name TEXT NOT NULL UNIQUE
  11. );
  12. INSERT INTO t2 (key, name) VALUES ('t2_key1', 't2_name1');
  13. INSERT INTO t2 (key, name) VALUES ('t2_key2', 't2_name2');
  14.  
  15. CREATE TABLE t3 (
  16. key TEXT PRIMARY KEY NOT NULL,
  17. name TEXT NOT NULL UNIQUE
  18. );
  19. INSERT INTO t3 (key, name) VALUES ('t3_key1', 't3_name1');
  20. INSERT INTO t3 (key, name) VALUES ('t3_key2', 't3_name2');
  21.  
  22. CREATE TABLE t4 (
  23. year TEXT NOT NULL,
  24. t1_key TEXT NOT NULL,
  25. t3_key TEXT NOT NULL,
  26. percent INTEGER NOT NULL,
  27. UNIQUE(year, t1_key, t3_key),
  28. FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE,
  29. FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE
  30. );
  31. INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2011', 't1_key1', 't3_key1', 10);
  32. INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key2', 50);
  33. INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key1', 100);
  34.  
  35. CREATE TABLE t5 (
  36. no INTEGER PRIMARY KEY AUTOINCREMENT,
  37. date TEXT NOT NULL,
  38. t2_key TEXT NOT NULL,
  39. t3_key TEXT NOT NULL,
  40. amount INTEGER NOT NULL,
  41. FOREIGN KEY(t2_key) REFERENCES t2(key) ON DELETE CASCADE,
  42. FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE
  43. );
  44. INSERT INTO t5 (date, t2_key, t3_key, amount) VALUES ('2011-01-01', 't2_key1', 't3_key1', 3000);
  45. INSERT INTO t5 (date, t2_key, t3_key, amount) VALUES ('2011-02-02', 't2_key1', 't3_key2', 2000);
  46. INSERT INTO t5 (date, t2_key, t3_key, amount) VALUES ('2012-01-01', 't2_key1', 't3_key1', 5000);
  47.  
Success #stdin #stdout 0s 2964KB
stdin
select '-- t1 --';
select * from t1;

select '-- t2 --';
select * from t2;

select '-- t3 --';
select * from t3;

select '-- t4 --';
select * from t4;

select '-- t5--';
select * from t5;

select '-- 結果 --';
select sum(t5.amount * (t4.percent / 100.0)) result from 
(
 (
  select strftime('%Y', date) year, t2_key, t3_key, amount 
  from t5
  where strftime('%Y', date) = '2011'
 ) t5
 inner join t2 on (t2.key = t5.t2_key)
 inner join
  (
   select t4.* from t4 
   inner join t1 on (t4.t1_key = t1.key and t1.name = 't1_name1')
  ) t4
 on (t5.t3_key = t4.t3_key and t5.year = t4.year)
);
stdout
-- t1 --
t1_key1|t1_name1
t1_key2|t1_name2
-- t2 --
t2_key1|t2_name1
t2_key2|t2_name2
-- t3 --
t3_key1|t3_name1
t3_key2|t3_name2
-- t4 --
2011|t1_key1|t3_key1|10
2012|t1_key2|t3_key2|50
2012|t1_key2|t3_key1|100
-- t5--
1|2011-01-01|t2_key1|t3_key1|3000
2|2011-02-02|t2_key1|t3_key2|2000
3|2012-01-01|t2_key1|t3_key1|5000
-- 結果 --
300.0