The table purchase contains:
row supplier | type | marker | price
--------------------------------
1 .... ABC | A | 0 | 3.50
2 .... ABC | B | 0 | 4.40
3 .... ABC | B | 0 | 5.50
4 .... ABC | C | 1 | 8.70
5 .... ABC | C | 0 | 9.00
6 .... DEF | A | 0 | 3.80
7 .... DEF | A | 0 | 5.10
8 .... DEF | D | 0 | 9.20
9 .... GHI | E | 0 | 2.80
10 ... GHI | E | 0 | 3.30
11 ... GHI | E | 1 | 4.10
12 ... GHI | E | 0 | 5.40
13 ... GHI | F | 0 | 9.90
A query should deliver entries for type which fulfill the following conditions:
- from
supplieronly which has at least one dataset withmarker = 1 - for
pricewhich is smaller thanpricewithmarker = 1for that specificsupplier
This applies to the rows 1, 2, 3, 9 and 10.
My attempt is (following Nakeuri's general guideline):
DECLARE @supplier CHAR(3), @price FLOAT
DECLARE CurName CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT SUPPLIER, PRICE
FROM PURCHASE
WHERE MARKER = 1
OPEN CurName
FETCH NEXT FROM CurName INTO @supplier, @price
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT DISTINCT TYPE
FROM PURCHASE
WHERE SUPPLIER = @supplier AND PRICE < @price
FETCH NEXT FROM CurName INTO @supplier, @price
END
CLOSE CurName
DEALLOCATE CurName
This results in individual outputs per supplier:
type (for supplier ABC)
----
A
B
type (for supplier GHI)
----
E
I'd need one output table:
type
----
A
B
E
How do I have to edit the query for a merge of the two outputs into one output? The suggestion for Henrik can not be applied as my case is not a counting operation.
System:
- Product: Microsoft SQL Server Standard (64-bit)
- Operating System: Windows Server 2022 Standard, Version 21H2

@Price FLOATis 100% incorrect.