物の寸法を調べているのですが、大きいものから小さいものまで3つの寸法を知りたいです。
だからここに私が書いた一種の気まぐれな関数があります:
CREATE FUNCTION dbo.SortDimensions
( @aDim1 udt_Dimension
, @aDim2 udt_Dimension
, @aDim3 udt_Dimension
)
RETURNS @rDimensions TABLE
( Dim1 udt_Dimension
, Dim2 udt_Dimension
, Dim3 udt_Dimension
)
AS
BEGIN
; WITH OrderedDims ( Dimension ) AS (
SELECT @aDim1
UNION ALL SELECT @aDim2
UNION ALL SELECT @aDim3
)
, Pairs ( Name, Value ) AS (
SELECT 'Dim' + CAST( ROW_NUMBER() OVER (ORDER BY( Dimension ) DESC ) AS varchar ), Dimension
FROM OrderedDims
)
INSERT INTO @rDimensions ( Dim1, Dim2, Dim3 )
SELECT MAX(Dim1), MAX(Dim2), MAX(Dim3)
FROM Pairs
PIVOT ( MAX(Value) FOR Name IN ( [Dim1], [Dim2], [Dim3] )) p
RETURN
END
これは、これと同じことをするのに大変な作業ではありませんか?
DECLARE @lDim1 udt_Dimension
DECLARE @lDim2 udt_Dimension
DECLARE @lDim2 udt_Dimension
IF @aDim2 > @aDim1
BEGIN
SELECT @lDim1 = @aDim2
, @lDim2 = @aDim1
END
ELSE
BEGIN
SELECT @lDim1 = @aDim1
, @lDim2 = @aDim2
END
IF NOT @aDim3 > @aDim2
BEGIN
SET @lDim3 = @aDim3
END
ELSE
BEGIN
SET @lDim3 = @lDim2
IF @aDim3 > @lDim1
BEGIN
SET @lDim2 = @lDim1
SET @lDim1 = @aDim3
END
ELSE
BEGIN
SET @lDim2 = @aDim3
END
END
INSERT INTO @rDimensions VALUES ( @lDim1, @lDim2, @lDim3 )
DBA は、SQL サーバーを設計した人が変数の一時テーブルのテクノロジを再利用したため、テーブルと変数の間のほとんどのウォッシュであると私に言ったと思います。(もしそれが真実でないなら、どうぞ、この考えを私から誤解させてください。)