Как преобразовать один столбец в одну строку в SQL Server?

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

0
задан Mohammad lm71 10 March 2019 в 18:22
поделиться

2 ответа

Есть несколько способов преобразовать данные столбца в данные строки. Использование функции «PIVOT»

select CheckBox0, CheckBox1, CheckBox2, CheckBox3
from
(
  select Id, CheckBoxList
  from yourtable
) d
pivot
(
  max(Id)
  for CheckBoxList in (CheckBox0, CheckBox1, CheckBox2, CheckBox3)
) piv;
0
ответ дан lazydeveloper 10 March 2019 в 18:22
поделиться

Один метод - условное агрегирование:

select max(case when seqnum = 1 then CheckBoxList end) as checkbox_0,
       max(case when seqnum = 2 then CheckBoxList end) as checkbox_1,
       max(case when seqnum = 3 then CheckBoxList end) as checkbox_2,
       max(case when seqnum = 4 then CheckBoxList end) as checkbox_3       
from (select t.*,
             row_number() over (order by id) as seqnum
      from t
     ) t;

Обратите внимание, что при этом будут возвращены четыре столбца независимо от числа в таблице. Если вам нужно столько столбцов, сколько строк. , , тогда вам нужен динамический SQL. Я мог бы предостеречь вас от этого и использовать вместо этого агрегирование строк.

0
ответ дан Gordon Linoff 10 March 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: