Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用适当的order by子句,如果这样可以轻松地获取数据。如果有机会让他们改变桌子的设计,那就这么做。是的,你说得对。这是我的第一个决定。我就是不能用datareader等做这件事,我考虑过这个请求。非常感谢您的帮助和建议! Table 1 id _Sql_Sql Server_Matrix - Fatal编程技术网

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