Я видел, как это делалось двумя способами.
init
. Чтобы быть ясными, не делайте этого. Это необязательно и сделает ваши синглеты чрезмерно трудными для тестирования и подкласса.
edit, чтобы добавить примеры
- (instancetype)init {
[self doesNotRecognizeSelector:_cmd];
return nil;
}
- (instancetype)initPrivate {
self = [super init];
if (self) {
}
return self;
}
+ (instancetype)sharedInstance {
static MySingleton *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] initPrivate];
});
return sharedInstance;
}
- (instancetype)init {
return [[self class] sharedInstance];
}
- (instancetype)initPrivate {
self = [super init];
if (self) {
}
return self;
}
+ (instancetype)sharedInstance {
static MySingleton2 *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] initPrivate];
});
return sharedInstance;
}
Попробуйте запрос ниже.
SELECT
i.*,
(SELECT
f.Price
FROM #TableB f
WHERE i.ID_1 = f.PriceID)
AS NewPrice1,
(SELECT
f1.Price
FROM #TableB f1
WHERE i.ID_2 = f1.PriceID)
AS NewPrice2,
(SELECT
f2.Price
FROM #TableB f2
WHERE i.ID_3 = f2.PriceID)
AS NewPrice3,
(SELECT
f3.Price
FROM #TableB f3
WHERE i.ID_4 = f3.PriceID)
AS NewPrice4,
(SELECT
f4.Price
FROM #TableB f4
WHERE i.ID_5 = f4.PriceID)
AS NewPrice5,
(SELECT
f5.Price
FROM #TableB f5
WHERE i.ID_6 = f5.PriceID)
AS NewPrice6
FROM #TableA i
Под другим углом, чтобы посмотреть на это:
DECLARE @A TABLE
(
Price INT,
ID_1 INT,
ID_2 INT,
ID_3 INT
)
INSERT INTO @A
(
Price,
ID_1,
ID_2,
ID_3
)
VALUES
(129.90, 1, 1, 1),
(199.90, 2, 1, 1),
(249.90, 3, 2, 1),
(299.90, 4, 4, 3),
(399.90, 6, 5, 4)
DECLARE @B TABLE
(
Price INT,
PriceID INT
)
INSERT INTO @B
(
Price,
PriceID
)
VALUES
(129.90, 1),
(149.90, 2),
(199.90, 3),
(249.90, 4),
(299.90, 5),
(399.90, 6)
SELECT
a.Price,
SUM(b.NewPrice1),
SUM(b.NewPrice2),
SUM(b.NewPrice3)
FROM @A a
CROSS APPLY
(
SELECT
CASE WHEN PriceID = a.ID_1 THEN Price ELSE NULL END AS NewPrice1,
CASE WHEN PriceID = a.ID_2 THEN Price ELSE NULL END AS NewPrice2,
CASE WHEN PriceID = a.ID_3 THEN Price ELSE NULL END AS NewPrice3
FROM @B
) b
GROUP BY a.Price