Sql 使用适当的order by子句,如果这样可以轻松地获取数据。如果有机会让他们改变桌子的设计,那就这么做。是的,你说得对。这是我的第一个决定。我就是不能用datareader等做这件事,我考虑过这个请求。非常感谢您的帮助和建议! Table 1 id
Sql 使用适当的order by子句,如果这样可以轻松地获取数据。如果有机会让他们改变桌子的设计,那就这么做。是的,你说得对。这是我的第一个决定。我就是不能用datareader等做这件事,我考虑过这个请求。非常感谢您的帮助和建议! Table 1 id ,sql,sql-server,matrix,Sql,Sql Server,Matrix,使用适当的order by子句,如果这样可以轻松地获取数据。如果有机会让他们改变桌子的设计,那就这么做。是的,你说得对。这是我的第一个决定。我就是不能用datareader等做这件事,我考虑过这个请求。非常感谢您的帮助和建议! Table 1 id year toy1 toy2 toy3 ------------------------------- -1 1 3 2 1 2016 100 20 50 2
使用适当的order by子句,如果这样可以轻松地获取数据。如果有机会让他们改变桌子的设计,那就这么做。是的,你说得对。这是我的第一个决定。我就是不能用datareader等做这件事,我考虑过这个请求。非常感谢您的帮助和建议!
Table 1
id year toy1 toy2 toy3
-------------------------------
-1 1 3 2
1 2016 100 20 50
2 2017 150 120 40
Table 2
id toy
---------------
1 doll
2 car
3 bear
Result matrix
id year toy1 toy2 toy3
-------------------------------
-1 doll bear car
1 2016 100 20 50
2 2017 150 120 40
SELECT T.id,
T.year,
CASE
WHEN T1.TOY IS NULL THEN CAST(T.[toy1] AS VARCHAR) ELSE T1.TOY
END [toy1],
CASE
WHEN T2.TOY IS NULL THEN CAST(T.[toy2] AS VARCHAR) ELSE T2.TOY
END [toy2],
CASE
WHEN T3.TOY IS NULL THEN CAST(T.[toy3] AS VARCHAR) ELSE T3.TOY
END [toy3]
FROM <Table1> T
LEFT JOIN <Table2> T1 ON T1.ID = T.toy1
LEFT JOIN <Table2> T2 ON T2.ID = T.toy2
LEFT JOIN <Table2> T3 ON T3.ID = T.toy3;
id year toy1 toy2 toy3
-1 NULL doll bear car
1 2016 100 20 50
2 2017 150 120 40
SELECT T1.id,
year,
CASE WHEN T1.Toy1 = T2.id AND T1.id=-1 THEN T2.toy
ELSE T1.Toy1
END AS Toy1,
CASE WHEN T1.Toy2 = T2.id AND T1.id=-1THEN T2.toy
ELSE T1.Toy2
END AS Toy1,
CASE WHEN T1.Toy3 = T2.id AND T1.id=-1 THEN T2.toy
ELSE T1.Toy3
END AS Toy3
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.id=-1 AND T2.id IN (T1.Toy1, T1.Toy2, T1.Toy3)
toy_id | name
-------+-----
1 | doll
2 | car
3 | bear
year | toy_id | amount
2016 | 1 | 100
2016 | 2 | 20
2016 | 3 | 50
2017 | 1 | 150
2017 | 2 | 120
2017 | 3 | 40
DECLARE @table1 TABLE (id int, [year] int, toy1 int, toy2 int, toy3 int)
DECLARE @table2 TABLE (id int, toy varchar(100))
INSERT INTO @table1 VALUES (-1, null, 1, 3, 2), (1, 2016, 100,20,50), (2,2017,150,120,40)
INSERT INTO @table2 VALUES (1,'doll'), (2,'car'), (3,'bear')
-- for the -1 row
SELECT T1.id, COALESCE(CAST(year as varchar), '') AS year
,(SELECT toy FROM @table2 T2 WHERE T2.id = T1.toy1) AS toy1
,(SELECT toy FROM @table2 T2 WHERE T2.id = T1.toy2) AS toy2
,(SELECT toy FROM @table2 T2 WHERE T2.id = T1.toy3) AS toy3
FROM @table1 T1
WHERE T1.id = -1
UNION ALL
--all other rows
SELECT T3.id
,CAST(T3.year as varchar)
,CAST(T3.toy1 as varchar)
,CAST(T3.toy2 as varchar)
,CAST(T3.toy3 as varchar)
FROM @table1 T3
WHERE T3.id <> -1
id year toy1 toy2 toy3
-1 doll bear car
1 2016 100 20 50
2 2017 150 120 40