Замена значения различными строками - PullRequest
0 голосов
/ 21 марта 2012

У меня проблема с базой данных.У меня есть следующее:

create table book
(
    name_b varchaR(50) primary key,
    typee varchaR(50) not null,
    nmbr integer unique not null,
    yeare numeric(4,0) default null,
)

create table story
(
    id integer identity(1,1) primary key,
    name_s varchar(100) not null,
    chars varchar(100) not null,
    code varchaR(200) null,
    artist varchar(100) default null,
    argument varchar(100) default null,
    book_ref_name varchar(50) references book(name_b),
    book_ref_nmbr integer references book(nmbr)
)

insert into story values
('StoryName1','StoryChars1',null,default,default,'BookName1',13),
('StoryName2','StoryChars2',null,default,default,'BookName2',35),
('StoryName3','StoryChars3',null,default,default,'BookName3',125)

insert into book values
('BookName1','Type1',13,default),
('BookName2','Type2',35,default),
('BookName3','Type3',125,default)

, что я хочу с этим, это STORY.CODE, который должен быть заменен с NULL на соединение строк, например представьте первую запись таблицы STORY

('StoryName1','StoryChars1',null,default,default,'BookName1',13)

в этом случае я бы хотел, чтобы STORY.CODE был заменен на 'StoryName1-StoryChars1-BookName1-13'.

это вообще возможно?если это не то, что ближайшая возможность что-то подобное?спасибо заранее


еще одно сомнение у меня, как я могу сделать оператор SELECT, который выбирает * из STORY, кроме нулевых полей.например, если в истории нет аргументатора / исполнителя, я не хочу, чтобы это поле отображалось.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Если вы хотите сделать это через UPDATE

UPDATE story
SET code = name_s + '-' + chars + '-' + book_ref_name + '-' + Convert(varchar(50), book_ref_nmbr)
WHERE code IS NULL

Через INSERT вы в основном делаете что-то похожее:

INSERT INTO story (fields,....)
SELECT 'StoryName1'
    ,'StoryChars1'
    ,IsNull(('StoryName1' + '-' + 'StoryChars1'+ '-' + 'BookName1' + '-' + Convert(varchar(50), 13), codevalue)
    ,default,default,'BookName1',13

Или вы можете использовать CASE

INSERT INTO story (fields,....)
SELECT 'StoryName1'
    ,'StoryChars1'
    , CASE
      WHEN code Is Null
            THEN ('StoryName1' + '-' + 'StoryChars1'+ '-' + 'BookName1' + '-' + Convert(varchar(50), 13)
            ELSE yourcodevalue
      END
    ,default,default,'BookName1',13

Что касается вашего второго вопроса относительно SELECT, я думаю, что это то, что вам нужно

SELECT *
FROM story
WHERE artist is not Null
AND/OR argument is not Null
0 голосов
/ 21 марта 2012
Select CONCAT(artist, argument, etc) as joinedField
FROM Story

Исходя из ваших отзывов, я думаю, вы можете объединить несколько полей в один результат.Если вы хотите поразмышлять над значениями NULL, вы можете указать некоторые условные критерии.

Ссылка: http://www.1keydata.com/sql/sql-concatenate.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...