Home Forums SQL Server 2012 SQL Server 2012 - T-SQL ALIGNMENT RE: ALIGNMENT
December 13, 2017 at 8:10 pm
Jason A. Long - Wednesday, December 13, 2017 1:57 PMTry this...SET QUOTED_IDENTIFIER ON;
GO
SET ANSI_NULLS ON;
GO
CREATE PROCEDURE dbo.usp_Align
/* =================================================================================================================================
12/13/2017 JL, Created for forum post: https://www.sqlservercentral.com/Forums/1912528/ALIGNMENT
================================================================================================================================= */
/*
dbo.usp_Align
@cnt = 25,
@v_dir = 'D',
@h_dir = 'R';
*/
@cnt INT,
@v_dir CHAR(1),
@h_dir CHAR(1)
AS
BEGIN
SET NOCOUNT ON;DECLARE @_output VARCHAR(8000) = '';
WITH
cte_n1 (n) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n (n)),
cte_n2 (n) AS (SELECT 1 FROM cte_n1 a CROSS JOIN cte_n1 b),
cte_n3 (n) AS (SELECT 1 FROM cte_n2 a CROSS JOIN cte_n2 b),
cte_Tally (rep_val) AS (
SELECT TOP (@cnt)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM
cte_n3 a CROSS JOIN cte_n3 b
),
cte_build_string AS (
SELECT
t.rep_val,
pv.pad_val,
ov.output_val
FROM
cte_Tally t
CROSS APPLY ( VALUES (@cnt - t.rep_val) ) pv (pad_val)
CROSS APPLY ( VALUES (
REPLICATE(CASE WHEN @h_dir = 'L' THEN 'A' ELSE ' ' END, CASE WHEN @h_dir = 'L' THEN t.rep_val ELSE pv.pad_val END)
+ REPLICATE(CASE WHEN @h_dir = 'R' THEN 'A' ELSE ' ' END, CASE WHEN @h_dir = 'R' THEN t.rep_val ELSE pv.pad_val END)
) ) ov (output_val)
)
SELECT
@_output = (
SELECT
CONCAT(@_output, '||', bs.output_val)
FROM
cte_build_string bs
ORDER BY
CASE WHEN @v_dir = 'U' THEN bs.rep_val ELSE bs.pad_val END
FOR XML PATH('')
);PRINT(REPLACE(@_output, '||', CHAR(13) + CHAR(10)));
END;
GOSample output...
dbo.usp_Align
@cnt = 10,
@v_dir = 'U',
@h_dir = 'L';
-----------------------------------
A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
AAAAAAAA
AAAAAAAAA
AAAAAAAAAA
dbo.usp_Align
@cnt = 10,
@v_dir = 'D',
@h_dir = 'L';
-----------------------------------
AAAAAAAAAA
AAAAAAAAA
AAAAAAAA
AAAAAAA
AAAAAA
AAAAA
AAAA
AAA
AA
A
dbo.usp_Align
@cnt = 10,
@v_dir = 'U',
@h_dir = 'R';
---------------------------------- (the raggedness is forum formatting)
A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
AAAAAAAA
AAAAAAAAA
AAAAAAAAAA
dbo.usp_Align
@cnt = 10,
@v_dir = 'D',
@h_dir = 'R';
---------------------------------- (the raggedness is forum formatting)
AAAAAAAAAA
AAAAAAAAA
AAAAAAAA
AAAAAAA
AAAAAA
AAAAA
AAAA
AAA
AA
A
Hi Jason,
This sp really work..Cool..thank you
I do not understand about using 'With' and 'cte'