-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQLscriptfordetails.sql
More file actions
165 lines (120 loc) · 4.59 KB
/
SQLscriptfordetails.sql
File metadata and controls
165 lines (120 loc) · 4.59 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
use details;
-- 1. Номера изделий, для которых детали полностью поставляет поставщик
SET @param_post = 'S1';
SELECT num_izdel
FROM spj
GROUP BY num_izdel
HAVING COUNT(DISTINCT num_post) = 1 AND MAX(num_post) = @param_post;
-- ---------------------------------------------------------
-- 2. Общее количество деталей (P1), поставляемых поставщиком
SET @param_det = 'P1';
SET @param_post = 'S1';
SELECT SUM(Count)
FROM spj
WHERE num_Det = @param_det AND num_post = @param_post;
-- ---------------------------------------------------------
-- 3. Номера изделий, использующих только детали, поставляемые поставщиком
SET @param_post = 'S1';
SELECT DISTINCT num_izdel
FROM spj t1
WHERE NOT EXISTS (
SELECT * FROM spj t2
WHERE t2.num_izdel = t1.num_izdel AND t2.num_post <> @param_post
);
-- ---------------------------------------------------------
-- 4. Общее число изделий, для которых поставляет детали поставщик
SET @param_post = 'S1';
SELECT COUNT(DISTINCT num_izdel) spj
FROM spj
WHERE num_post = @param_post;
-- ---------------------------------------------------------
-- 5. Номера изделий, детали для которых поставляет каждый поставщик, поставляющий деталь цвета
SET @param_color = 'Красный';
SELECT DISTINCT num_izdel
FROM spj Main
WHERE NOT EXISTS (
SELECT DISTINCT num_post
FROM spj
JOIN p ON spj.num_Det = p.num_Det
WHERE p.Color = @param_color
AND num_post NOT IN (
SELECT num_post FROM spj Sub WHERE Sub.num_izdel = Main.num_izdel
)
);
-- ---------------------------------------------------------
-- 6. Полный список деталей для всех изделий, изготавливаемых в городе (Лондон)
SET @param_city = 'Лондон';
SELECT DISTINCT p.*
FROM p
JOIN spj ON p.num_Det = spj.num_Det
JOIN j ON spj.num_izdel = j.num_izdel
WHERE j.City = @param_city;
-- ---------------------------------------------------------
-- 7. Номера деталей, поставляемых каким-либо поставщиком из города (Лондон)
SET @param_city = 'Лондон';
SELECT DISTINCT spj.num_Det
FROM spj
JOIN s ON spj.num_post = s.num_post
WHERE s.City = @param_city;
-- ---------------------------------------------------------
-- 8. Список поставок, количество деталей в которых в диапазоне (300 - 750)
SET @range_min = 300;
SET @range_max = 750;
SELECT *
FROM spj
WHERE Count BETWEEN @range_min AND @range_max;
-- ---------------------------------------------------------
-- 9. Номера и названия деталей, поставляемых для изделия из города (Лондон)
SET @param_city = 'Лондон';
SELECT DISTINCT p.num_Det, p.Name
FROM p
JOIN spj ON p.num_Det = spj.num_Det
JOIN j ON spj.num_izdel = j.num_izdel
WHERE j.City = @param_city;
-- ---------------------------------------------------------
-- 10. Цвета деталей, поставляемых поставщиком (S1)
SET @param_post = 'S1';
SELECT DISTINCT p.Color
FROM p
JOIN spj ON p.num_Det = spj.num_Det
WHERE spj.num_post = @param_post;
-- ---------------------------------------------------------
-- 11. Поставщики, поставляющие деталь (P1) больше среднего объема для этого изделия
SET @param_det = 'P1';
SELECT DISTINCT s.num_post, s.Family
FROM s
JOIN spj ON s.num_post = spj.num_post
WHERE spj.num_Det = @param_det
AND spj.Count > (
SELECT AVG(Sub.Count)
FROM spj AS Sub
WHERE Sub.num_Det = @param_det AND Sub.num_izdel = spj.num_izdel
);
-- ---------------------------------------------------------
-- 12. Названия изделий, для которых поставляются детали поставщиком (S1)
SET @param_post = 'S1';
SELECT DISTINCT j.Name
FROM j
JOIN spj ON j.num_izdel = spj.num_izdel
WHERE spj.num_post = @param_post;
SET @param_post = 'синий';
UPDATE p
JOIN (
SELECT MAX(weight) as max_w
FROM p
) as temp
ON p.weight = temp.max_w
SET p.color = @param_post;
SET @param_post = 'Серой';
Select p.num_Det, p.weight, p.color
From p
WHERE p.weight = (
SELECT MAX(p.weight)
FROM p
);
SET @param_post = 'Серой';
update details.p
SET details.p.color = @param_post
WHERE details.p.weight = (
SELECT MAX(details.p.weight)
);